Merge branch 'uos' into maintain/5.2
Change-Id: Ib6c973695a6375e5e68e0ef0a5e8b163cd20a9e7 # Conflicts: # frame/util/multiscreenworker.cpp
19
.packit.yaml
Normal file
@ -0,0 +1,19 @@
|
||||
# See the documentation for more information:
|
||||
# https://packit.dev/docs/configuration/
|
||||
|
||||
specfile_path: rpm/deepin-dock.spec
|
||||
|
||||
# add or remove files that should be synced
|
||||
synced_files:
|
||||
- rpm/deepin-dock.spec
|
||||
- .packit.yaml
|
||||
|
||||
upstream_package_name: dde-dock
|
||||
# downstream (Fedora) RPM package name
|
||||
downstream_package_name: deepin-dock
|
||||
|
||||
actions:
|
||||
fix-spec-file: |
|
||||
bash -c "sed -i -r \"0,/Version:/ s/Version:(\s*)\S*/Version:\1${PACKIT_PROJECT_VERSION}/\" rpm/deepin-dock.spec"
|
||||
post-upstream-clone: |
|
||||
cp rpm/dde-dock.spec rpm/deepin-dock.spec
|
@ -2,6 +2,8 @@ cmake_minimum_required(VERSION 3.7)
|
||||
|
||||
set(VERSION 4.0)
|
||||
|
||||
configure_file(dde-dock.pc.in dde-dock.pc @ONLY)
|
||||
|
||||
project(dde-dock)
|
||||
|
||||
#set(CMAKE_VERBOSE_MAKEFILE ON)
|
||||
@ -63,7 +65,7 @@ install(FILES ${QM_FILES}
|
||||
install(FILES ${INTERFACES}
|
||||
DESTINATION include/dde-dock)
|
||||
|
||||
install(FILES "dde-dock.pc"
|
||||
install(FILES ${CMAKE_BINARY_DIR}/dde-dock.pc
|
||||
DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
|
||||
|
||||
install(FILES "cmake/DdeDock/DdeDockConfig.cmake"
|
||||
|
@ -1,6 +1,6 @@
|
||||
prefix=/usr
|
||||
exec_prefix=${prefix}
|
||||
libdir=${prefix}/lib/x86_64-linux-gnu
|
||||
libdir=${prefix}/lib/@HOST_MULTIARCH@
|
||||
includedir=${prefix}/include/dde-dock
|
||||
|
||||
Name: dde dock
|
19
debian/control
vendored
@ -11,7 +11,6 @@ Build-Depends: debhelper (>= 8.0.0),
|
||||
libqt5x11extras5-dev,
|
||||
libxcb-damage0-dev,
|
||||
libqt5svg5-dev,
|
||||
libxcb-icccm4-dev,
|
||||
libxtst-dev,
|
||||
libdtkwidget-dev,
|
||||
libdtkcore-dev,
|
||||
@ -24,13 +23,17 @@ Build-Depends: debhelper (>= 8.0.0),
|
||||
cmake,
|
||||
libdde-network-utils-dev,
|
||||
libdbusmenu-qt5-dev,
|
||||
libdtkgui-dev
|
||||
libdtkgui-dev,
|
||||
libgtest-dev
|
||||
Standards-Version: 3.9.8
|
||||
Homepage: http://www.deepin.org/
|
||||
|
||||
Package: dde-dock
|
||||
Architecture: any
|
||||
Depends: ${shlibs:Depends}, ${misc:Depends}
|
||||
Depends: ${shlibs:Depends}, ${misc:Depends},
|
||||
deepin-desktop-schemas (>=5.8.0.34),
|
||||
libdframeworkdbus2 (>=5.3.0.24),
|
||||
libdde-network-utils (>=5.3.0.5)
|
||||
Recommends: dde-disk-mount-plugin, dde-dock-onboard-plugin
|
||||
Conflicts:
|
||||
dde-workspace (<< 2.90.5),
|
||||
@ -40,16 +43,16 @@ Replaces:
|
||||
dde-dock-applets,
|
||||
dde-trash-plugin
|
||||
Description: deepin desktop-environment - dock module
|
||||
Deepin desktop environment - dock module.
|
||||
Dock module of deepin desktop-environment
|
||||
|
||||
Package: dde-dock-dev
|
||||
Architecture: all
|
||||
Architecture: any
|
||||
Depends: ${shlibs:Depends}, ${misc:Depends}
|
||||
Description: deepin desktop-environment - dock module development files
|
||||
Deepin desktop environment - dock module development files.
|
||||
Dock module development files of deepin desktop-environment
|
||||
|
||||
Package: dde-dock-onboard-plugin
|
||||
Architecture: any
|
||||
Depends: ${shlibs:Depends}, ${misc:Depends}, onboard
|
||||
Description: deepin desktop-environment - dock plugin
|
||||
Deepin desktop environment - dock plugin for onboard
|
||||
Description: deepin desktop-environment - dock plugin for onboard
|
||||
Dock plugin for onboard of deepin desktop-environment
|
||||
|
7
debian/rules
vendored
@ -1,6 +1,8 @@
|
||||
#!/usr/bin/make -f
|
||||
# -*- makefile -*-
|
||||
export QT_SELECT=5
|
||||
export QT_SELECT = qt5
|
||||
|
||||
DEB_HOST_MULTIARCH ?= $(shell dpkg-architecture -qDEB_HOST_MULTIARCH)
|
||||
|
||||
# Uncomment this to turn on verbose mode.
|
||||
#export DH_VERBOSE=1
|
||||
@ -8,3 +10,6 @@ export QT_SELECT=5
|
||||
%:
|
||||
dh $@ --parallel
|
||||
|
||||
override_dh_auto_configure:
|
||||
dh_auto_configure -- \
|
||||
-DHOST_MULTIARCH="$(DEB_HOST_MULTIARCH)"
|
||||
|
@ -42,16 +42,21 @@ void DockPluginsController::itemAdded(PluginsItemInterface *const itemInter, con
|
||||
if (mPluginsMap[itemInter].contains(itemKey))
|
||||
return;
|
||||
|
||||
// 取 plugin api
|
||||
QPluginLoader *pluginLoader = qobject_cast<QPluginLoader*>(mPluginsMap[itemInter].value("pluginloader"));
|
||||
const QJsonObject &meta = pluginLoader->metaData().value("MetaData").toObject();
|
||||
const QString &pluginApi = meta.value("api").toString();
|
||||
|
||||
PluginsItem *item = nullptr;
|
||||
if (itemInter->pluginName() == "tray") {
|
||||
item = new TrayPluginItem(itemInter, itemKey);
|
||||
item = new TrayPluginItem(itemInter, itemKey, pluginApi);
|
||||
if (item->graphicsEffect()) {
|
||||
item->graphicsEffect()->setEnabled(false);
|
||||
}
|
||||
connect(static_cast<TrayPluginItem *>(item), &TrayPluginItem::trayVisableCountChanged,
|
||||
this, &DockPluginsController::trayVisableCountChanged, Qt::UniqueConnection);
|
||||
} else {
|
||||
item = new PluginsItem(itemInter, itemKey);
|
||||
item = new PluginsItem(itemInter, itemKey, pluginApi);
|
||||
}
|
||||
|
||||
mPluginsMap[itemInter][itemKey] = item;
|
||||
|
@ -23,6 +23,7 @@
|
||||
#include "pluginsitem.h"
|
||||
#include "pluginsiteminterface.h"
|
||||
|
||||
#include "util/utils.h"
|
||||
#include "util/imagefactory.h"
|
||||
|
||||
#include <QPainter>
|
||||
@ -36,10 +37,11 @@
|
||||
|
||||
QPoint PluginsItem::MousePressPoint = QPoint();
|
||||
|
||||
PluginsItem::PluginsItem(PluginsItemInterface *const pluginInter, const QString &itemKey, QWidget *parent)
|
||||
PluginsItem::PluginsItem(PluginsItemInterface *const pluginInter, const QString &itemKey, const QString &plginApi, QWidget *parent)
|
||||
: DockItem(parent)
|
||||
, m_pluginInter(pluginInter)
|
||||
, m_centralWidget(m_pluginInter->itemWidget(itemKey))
|
||||
, m_pluginApi(plginApi)
|
||||
, m_itemKey(itemKey)
|
||||
, m_dragging(false)
|
||||
, m_gsettings(nullptr)
|
||||
@ -99,6 +101,16 @@ QString PluginsItem::pluginName() const
|
||||
return m_pluginInter->pluginName();
|
||||
}
|
||||
|
||||
PluginsItemInterface::PluginSizePolicy PluginsItem::pluginSizePolicy() const
|
||||
{
|
||||
// 插件版本大于 1.2.2 才能使用 PluginsItemInterface::pluginSizePolicy 函数
|
||||
if (Utils::comparePluginApi(m_pluginApi, "1.2.2") > 0) {
|
||||
return m_pluginInter->pluginSizePolicy();
|
||||
} else {
|
||||
return PluginsItemInterface::System;
|
||||
}
|
||||
}
|
||||
|
||||
DockItem::ItemType PluginsItem::itemType() const
|
||||
{
|
||||
if (m_pluginInter->type() == PluginsItemInterface::Normal) {
|
||||
|
@ -31,7 +31,7 @@ class PluginsItem : public DockItem
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit PluginsItem(PluginsItemInterface *const pluginInter, const QString &itemKey, QWidget *parent = nullptr);
|
||||
explicit PluginsItem(PluginsItemInterface *const pluginInter, const QString &itemKey, const QString &plginApi, QWidget *parent = nullptr);
|
||||
~PluginsItem() override;
|
||||
|
||||
int itemSortKey() const;
|
||||
@ -41,6 +41,7 @@ public:
|
||||
void setInContainer(const bool container);
|
||||
|
||||
QString pluginName() const;
|
||||
PluginsItemInterface::PluginSizePolicy pluginSizePolicy() const;
|
||||
|
||||
using DockItem::showContextMenu;
|
||||
using DockItem::hidePopup;
|
||||
@ -80,6 +81,7 @@ private:
|
||||
PluginsItemInterface *const m_pluginInter;
|
||||
QWidget *m_centralWidget;
|
||||
|
||||
const QString m_pluginApi;
|
||||
const QString m_itemKey;
|
||||
bool m_dragging;
|
||||
|
||||
|
@ -24,8 +24,8 @@
|
||||
#include <QEvent>
|
||||
#include <QGSettings>
|
||||
|
||||
TrayPluginItem::TrayPluginItem(PluginsItemInterface * const pluginInter, const QString &itemKey, QWidget *parent)
|
||||
: PluginsItem(pluginInter, itemKey, parent)
|
||||
TrayPluginItem::TrayPluginItem(PluginsItemInterface * const pluginInter, const QString &itemKey, const QString &pluginApi, QWidget *parent)
|
||||
: PluginsItem(pluginInter, itemKey, pluginApi, parent)
|
||||
{
|
||||
centralWidget()->installEventFilter(this);
|
||||
}
|
||||
|
@ -29,7 +29,7 @@ class TrayPluginItem : public PluginsItem
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
TrayPluginItem(PluginsItemInterface* const pluginInter, const QString &itemKey, QWidget *parent = nullptr);
|
||||
TrayPluginItem(PluginsItemInterface* const pluginInter, const QString &itemKey, const QString &pluginApi, QWidget *parent = nullptr);
|
||||
|
||||
inline ItemType itemType() const override {return ItemType::TrayPlugin;}
|
||||
|
||||
|
@ -58,27 +58,27 @@ MainPanelControl::MainPanelControl(QWidget *parent)
|
||||
: QWidget(parent)
|
||||
, m_mainPanelLayout(new QBoxLayout(QBoxLayout::LeftToRight, this))
|
||||
, m_fixedAreaWidget(new QWidget(this))
|
||||
, m_appAreaWidget(new QWidget(this))
|
||||
, m_trayAreaWidget(new QWidget(this))
|
||||
, m_pluginAreaWidget(new QWidget(this))
|
||||
, m_desktopWidget(new DesktopWidget(this))
|
||||
, m_fixedAreaLayout(new QBoxLayout(QBoxLayout::LeftToRight))
|
||||
, m_trayAreaLayout(new QBoxLayout(QBoxLayout::LeftToRight))
|
||||
, m_pluginLayout(new QBoxLayout(QBoxLayout::LeftToRight))
|
||||
, m_fixedSpliter(new QLabel(this))
|
||||
, m_appAreaWidget(new QWidget(this))
|
||||
, m_appAreaSonWidget(new QWidget(this))
|
||||
, m_appAreaSonLayout(new QBoxLayout(QBoxLayout::LeftToRight))
|
||||
, m_appSpliter(new QLabel(this))
|
||||
, m_trayAreaWidget(new QWidget(this))
|
||||
, m_trayAreaLayout(new QBoxLayout(QBoxLayout::LeftToRight))
|
||||
, m_traySpliter(new QLabel(this))
|
||||
, m_pluginAreaWidget(new QWidget(this))
|
||||
, m_pluginLayout(new QBoxLayout(QBoxLayout::LeftToRight))
|
||||
, m_desktopWidget(new DesktopWidget(this))
|
||||
, m_position(Position::Bottom)
|
||||
, m_placeholderItem(nullptr)
|
||||
, m_appDragWidget(nullptr)
|
||||
, m_dislayMode(Efficient)
|
||||
, m_fixedSpliter(new QLabel(this))
|
||||
, m_appSpliter(new QLabel(this))
|
||||
, m_traySpliter(new QLabel(this))
|
||||
, m_isHover(false)
|
||||
, m_needRecoveryWin(false)
|
||||
, m_isEnableLaunch(true)
|
||||
{
|
||||
init();
|
||||
initUi();
|
||||
updateMainPanelLayout();
|
||||
setAcceptDrops(true);
|
||||
setMouseTracking(true);
|
||||
@ -101,60 +101,54 @@ MainPanelControl::~MainPanelControl()
|
||||
{
|
||||
}
|
||||
|
||||
void MainPanelControl::init()
|
||||
void MainPanelControl::initUi()
|
||||
{
|
||||
// 主窗口
|
||||
m_fixedSpliter->setObjectName("spliter_fix");
|
||||
m_appSpliter->setObjectName("spliter_app");
|
||||
m_traySpliter->setObjectName("spliter_tray");
|
||||
|
||||
m_appAreaWidget->setAccessibleName("AppFullArea");
|
||||
|
||||
/* 固定区域 */
|
||||
m_fixedAreaWidget->setObjectName("fixedarea");
|
||||
m_fixedAreaWidget->setLayout(m_fixedAreaLayout);
|
||||
m_fixedAreaLayout->setSpacing(0);
|
||||
m_fixedAreaLayout->setContentsMargins(0, 0, 0, 0);
|
||||
m_mainPanelLayout->addWidget(m_fixedAreaWidget);
|
||||
m_mainPanelLayout->addWidget(m_fixedSpliter);
|
||||
|
||||
m_fixedSpliter->setObjectName("spliter_fix");
|
||||
m_mainPanelLayout->addWidget(m_fixedSpliter, Qt::AlignCenter);
|
||||
|
||||
/* 应用程序区域 */
|
||||
m_appAreaWidget->setAccessibleName("AppFullArea");
|
||||
m_mainPanelLayout->addWidget(m_appAreaWidget);
|
||||
m_mainPanelLayout->addWidget(m_appSpliter);
|
||||
m_appAreaSonLayout->setSpacing(0);
|
||||
m_appAreaSonLayout->setContentsMargins(0, 0, 0, 0);
|
||||
m_appAreaSonWidget->setObjectName("apparea");
|
||||
m_appAreaSonWidget->setLayout(m_appAreaSonLayout);
|
||||
m_appAreaSonLayout->setSpacing(0);
|
||||
m_appAreaSonLayout->setContentsMargins(0, 0, 0, 0);
|
||||
|
||||
m_appSpliter->setObjectName("spliter_app");
|
||||
m_mainPanelLayout->addWidget(m_appSpliter, Qt::AlignCenter);
|
||||
|
||||
/* 托盘区域 */
|
||||
m_trayAreaWidget->setObjectName("trayarea");
|
||||
m_trayAreaWidget->setLayout(m_trayAreaLayout);
|
||||
m_trayAreaLayout->setSpacing(0);
|
||||
m_trayAreaLayout->setContentsMargins(0, 10, 0, 10);
|
||||
m_mainPanelLayout->addWidget(m_trayAreaWidget);
|
||||
m_mainPanelLayout->addWidget(m_traySpliter);
|
||||
|
||||
m_traySpliter->setObjectName("spliter_tray");
|
||||
m_mainPanelLayout->addWidget(m_traySpliter, Qt::AlignCenter);
|
||||
|
||||
/* 插件区域 */
|
||||
m_pluginAreaWidget->setObjectName("pluginarea");
|
||||
m_pluginAreaWidget->setLayout(m_pluginLayout);
|
||||
m_pluginLayout->setSpacing(10);
|
||||
m_pluginLayout->setContentsMargins(0, 0, 0, 0);
|
||||
m_mainPanelLayout->addWidget(m_pluginAreaWidget);
|
||||
|
||||
m_mainPanelLayout->setMargin(0);
|
||||
m_mainPanelLayout->setContentsMargins(0, 0, 0, 0);
|
||||
m_mainPanelLayout->setSpacing(0);
|
||||
m_mainPanelLayout->setAlignment(m_fixedSpliter, Qt::AlignCenter);
|
||||
m_mainPanelLayout->setAlignment(m_appSpliter, Qt::AlignCenter);
|
||||
m_mainPanelLayout->setAlignment(m_traySpliter, Qt::AlignCenter);
|
||||
|
||||
// 固定区域
|
||||
m_fixedAreaWidget->setLayout(m_fixedAreaLayout);
|
||||
m_fixedAreaWidget->setObjectName("fixedarea");
|
||||
m_fixedAreaLayout->setMargin(0);
|
||||
m_fixedAreaLayout->setContentsMargins(0, 0, 0, 0);
|
||||
m_fixedAreaLayout->setSpacing(0);
|
||||
|
||||
// 应用程序
|
||||
m_appAreaSonWidget->setLayout(m_appAreaSonLayout);
|
||||
m_appAreaSonWidget->setObjectName("apparea");
|
||||
m_appAreaSonLayout->setMargin(0);
|
||||
m_appAreaSonLayout->setContentsMargins(0, 0, 0, 0);
|
||||
m_appAreaSonLayout->setSpacing(0);
|
||||
|
||||
// 托盘
|
||||
m_trayAreaWidget->setLayout(m_trayAreaLayout);
|
||||
m_trayAreaWidget->setObjectName("trayarea");
|
||||
m_trayAreaLayout->setMargin(0);
|
||||
m_trayAreaLayout->setContentsMargins(0, 10, 0, 10);
|
||||
m_trayAreaLayout->setSpacing(0);
|
||||
|
||||
// 插件
|
||||
m_pluginAreaWidget->setLayout(m_pluginLayout);
|
||||
m_pluginAreaWidget->setObjectName("pluginarea");
|
||||
m_pluginLayout->setMargin(0);
|
||||
m_pluginLayout->setSpacing(10);
|
||||
|
||||
//桌面
|
||||
/* 桌面预览 */
|
||||
m_mainPanelLayout->addWidget(m_desktopWidget);
|
||||
|
||||
m_mainPanelLayout->setSpacing(0);
|
||||
m_mainPanelLayout->setContentsMargins(0, 0, 0, 0);
|
||||
|
||||
connect(GSettingsByLaunch(), &QGSettings::changed, this, &MainPanelControl::onGSettingsChanged);
|
||||
}
|
||||
|
||||
@ -180,11 +174,11 @@ void MainPanelControl::onGSettingsChanged(const QString &key)
|
||||
}
|
||||
}
|
||||
|
||||
void MainPanelControl::setDisplayMode(DisplayMode mode)
|
||||
void MainPanelControl::setDisplayMode(DisplayMode dislayMode)
|
||||
{
|
||||
if (mode == m_dislayMode)
|
||||
if (dislayMode == m_dislayMode)
|
||||
return;
|
||||
m_dislayMode = mode;
|
||||
m_dislayMode = dislayMode;
|
||||
updateDisplayMode();
|
||||
}
|
||||
|
||||
@ -1064,10 +1058,17 @@ void MainPanelControl::calcuDockIconSize(int w, int h, PluginsItem *trashPlugin,
|
||||
if (layout) {
|
||||
PluginsItem *pItem = static_cast<PluginsItem *>(layout->itemAt(0)->widget());
|
||||
if (pItem && pItem != trashPlugin && pItem != shutdownPlugin && pItem != keyboardPlugin && pItem !=notificationPlugin) {
|
||||
if (pItem->pluginName() == "datetime") {
|
||||
pItem->setFixedSize(pItem->sizeHint().width(), h);
|
||||
} else {
|
||||
// 根据大小策略控制插件大小
|
||||
switch (pItem->pluginSizePolicy()) {
|
||||
case PluginsItemInterface::System:
|
||||
pItem->setFixedSize(tray_item_size, tray_item_size);
|
||||
break;
|
||||
case PluginsItemInterface::Custom:
|
||||
pItem->setFixedSize(pItem->sizeHint().width(), h);
|
||||
break;
|
||||
default:
|
||||
pItem->setFixedSize(tray_item_size, tray_item_size);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1079,10 +1080,17 @@ void MainPanelControl::calcuDockIconSize(int w, int h, PluginsItem *trashPlugin,
|
||||
if (layout) {
|
||||
PluginsItem *pItem = static_cast<PluginsItem *>(layout->itemAt(0)->widget());
|
||||
if (pItem && pItem != trashPlugin && pItem != shutdownPlugin && pItem != keyboardPlugin && pItem !=notificationPlugin) {
|
||||
if (pItem->pluginName() == "datetime") {
|
||||
pItem->setFixedSize(w, pItem->sizeHint().height());
|
||||
} else {
|
||||
// 根据大小策略控制插件大小
|
||||
switch (pItem->pluginSizePolicy()) {
|
||||
case PluginsItemInterface::System:
|
||||
pItem->setFixedSize(tray_item_size, tray_item_size);
|
||||
break;
|
||||
case PluginsItemInterface::Custom:
|
||||
pItem->setFixedSize(w, pItem->sizeHint().height());
|
||||
break;
|
||||
default:
|
||||
pItem->setFixedSize(tray_item_size, tray_item_size);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -47,7 +47,8 @@ class DesktopWidget : public QWidget
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit DesktopWidget(QWidget *parent) : QWidget(parent){
|
||||
explicit DesktopWidget(QWidget *parent) : QWidget(parent)
|
||||
{
|
||||
}
|
||||
};
|
||||
|
||||
@ -61,40 +62,49 @@ public:
|
||||
explicit MainPanelControl(QWidget *parent = nullptr);
|
||||
~MainPanelControl() override;
|
||||
|
||||
void addFixedAreaItem(int index, QWidget *wdg);
|
||||
void addAppAreaItem(int index, QWidget *wdg);
|
||||
void addTrayAreaItem(int index, QWidget *wdg);
|
||||
void addPluginAreaItem(int index, QWidget *wdg);
|
||||
void removeFixedAreaItem(QWidget *wdg);
|
||||
void removeAppAreaItem(QWidget *wdg);
|
||||
void removeTrayAreaItem(QWidget *wdg);
|
||||
void removePluginAreaItem(QWidget *wdg);
|
||||
void setPositonValue(Position position);
|
||||
void setDisplayMode(DisplayMode m_displayMode);
|
||||
void setDisplayMode(DisplayMode dislayMode);
|
||||
void getTrayVisableItemCount();
|
||||
|
||||
MainPanelDelegate *delegate() const;
|
||||
void setDelegate(MainPanelDelegate *delegate);
|
||||
|
||||
public slots:
|
||||
void insertItem(const int index, DockItem *item);
|
||||
void removeItem(DockItem *item);
|
||||
void itemUpdated(DockItem *item);
|
||||
|
||||
void onGSettingsChanged(const QString &key);
|
||||
|
||||
signals:
|
||||
void itemMoved(DockItem *sourceItem, DockItem *targetItem);
|
||||
void itemAdded(const QString &appDesktop, int idx);
|
||||
|
||||
private:
|
||||
void resizeEvent(QResizeEvent *event) override;
|
||||
|
||||
void init();
|
||||
void updateAppAreaSonWidgetSize();
|
||||
void updateMainPanelLayout();
|
||||
void updateDisplayMode();
|
||||
void moveAppSonWidget();
|
||||
|
||||
protected:
|
||||
void showEvent(QShowEvent *event) override;
|
||||
void dragMoveEvent(QDragMoveEvent *e) override;
|
||||
void dragEnterEvent(QDragEnterEvent *e) override;
|
||||
void dragLeaveEvent(QDragLeaveEvent *e) override;
|
||||
void dropEvent(QDropEvent *) override;
|
||||
bool eventFilter(QObject *watched, QEvent *event) override;
|
||||
void mousePressEvent(QMouseEvent *e) override;
|
||||
void resizeEvent(QResizeEvent *event) override;
|
||||
|
||||
private:
|
||||
void initUi();
|
||||
void updateAppAreaSonWidgetSize();
|
||||
void updateMainPanelLayout();
|
||||
void updateDisplayMode();
|
||||
void moveAppSonWidget();
|
||||
|
||||
void addFixedAreaItem(int index, QWidget *wdg);
|
||||
void removeFixedAreaItem(QWidget *wdg);
|
||||
void addAppAreaItem(int index, QWidget *wdg);
|
||||
void removeAppAreaItem(QWidget *wdg);
|
||||
void addTrayAreaItem(int index, QWidget *wdg);
|
||||
void removeTrayAreaItem(QWidget *wdg);
|
||||
void addPluginAreaItem(int index, QWidget *wdg);
|
||||
void removePluginAreaItem(QWidget *wdg);
|
||||
|
||||
void startDrag(DockItem *);
|
||||
DockItem *dropTargetItem(DockItem *sourceItem, QPoint point);
|
||||
@ -106,44 +116,35 @@ private:
|
||||
void resizeDesktopWidget();
|
||||
bool checkNeedShowDesktop();
|
||||
|
||||
public slots:
|
||||
void insertItem(const int index, DockItem *item);
|
||||
void removeItem(DockItem *item);
|
||||
void itemUpdated(DockItem *item);
|
||||
|
||||
// void
|
||||
void onGSettingsChanged(const QString &key);
|
||||
|
||||
protected:
|
||||
void showEvent(QShowEvent *event) override;
|
||||
private:
|
||||
QBoxLayout *m_mainPanelLayout;
|
||||
QWidget *m_fixedAreaWidget;
|
||||
QWidget *m_appAreaWidget;
|
||||
QWidget *m_trayAreaWidget;
|
||||
QWidget *m_pluginAreaWidget;
|
||||
DesktopWidget *m_desktopWidget;
|
||||
QBoxLayout *m_fixedAreaLayout;
|
||||
QBoxLayout *m_trayAreaLayout;
|
||||
QBoxLayout *m_pluginLayout;
|
||||
QWidget *m_appAreaSonWidget;
|
||||
QBoxLayout *m_appAreaSonLayout;
|
||||
// QBoxLayout *m_appAreaLayout;
|
||||
|
||||
QWidget *m_fixedAreaWidget; // 固定区域
|
||||
QBoxLayout *m_fixedAreaLayout; //
|
||||
QLabel *m_fixedSpliter; // 固定区域与应用区域间的分割线
|
||||
QWidget *m_appAreaWidget; // 应用区域
|
||||
QWidget *m_appAreaSonWidget; // 子应用区域
|
||||
QBoxLayout *m_appAreaSonLayout; //
|
||||
QLabel *m_appSpliter; // 应用区域与托盘区域间的分割线
|
||||
QWidget *m_trayAreaWidget; // 托盘区域
|
||||
QBoxLayout *m_trayAreaLayout; //
|
||||
QLabel *m_traySpliter; // 托盘区域与插件区域间的分割线
|
||||
QWidget *m_pluginAreaWidget; // 插件区域
|
||||
QBoxLayout *m_pluginLayout; //
|
||||
DesktopWidget *m_desktopWidget; // 桌面预览区域
|
||||
|
||||
Position m_position;
|
||||
QPointer<PlaceholderItem> m_placeholderItem;
|
||||
MainPanelDelegate *m_delegate;
|
||||
QString m_draggingMimeKey;
|
||||
AppDragWidget *m_appDragWidget;
|
||||
DisplayMode m_dislayMode;
|
||||
QLabel *m_fixedSpliter;
|
||||
QLabel *m_appSpliter;
|
||||
QLabel *m_traySpliter;
|
||||
QPoint m_mousePressPos;
|
||||
int m_trayIconCount;
|
||||
TrayPluginItem *m_tray = nullptr;
|
||||
bool m_isHover;//判断鼠标是否移到desktop区域
|
||||
bool m_isHover; // 判断鼠标是否移到desktop区域
|
||||
bool m_needRecoveryWin; // 判断鼠标移出desktop区域是否恢复之前窗口
|
||||
bool m_isEnableLaunch;//判断是否使能了com.deepin.dde.dock.module.launcher
|
||||
bool m_isEnableLaunch; // 判断是否使能了com.deepin.dde.dock.module.launcher
|
||||
};
|
||||
|
||||
#endif // MAINPANELCONTROL_H
|
||||
|
@ -32,6 +32,7 @@ static const QStringList CompatiblePluginApiList {
|
||||
"1.1.1",
|
||||
"1.2",
|
||||
"1.2.1",
|
||||
"1.2.2",
|
||||
DOCK_PLUGIN_API_VERSION
|
||||
};
|
||||
|
||||
@ -194,7 +195,10 @@ void AbstractPluginsController::loadPlugin(const QString &pluginFile)
|
||||
return;
|
||||
}
|
||||
|
||||
m_pluginsMap.insert(interface, QMap<QString, QObject *>());
|
||||
// 保存 PluginLoader 对象指针
|
||||
QMap<QString, QObject *> interfaceData;
|
||||
interfaceData["pluginloader"] = pluginLoader;
|
||||
m_pluginsMap.insert(interface, interfaceData);
|
||||
|
||||
QString dbusService = meta.value("depends-daemon-dbus-service").toString();
|
||||
if (!dbusService.isEmpty() && !m_dbusDaemonInterface->isServiceRegistered(dbusService).value()) {
|
||||
|
@ -35,6 +35,7 @@ DockPopupWindow::DockPopupWindow(QWidget *parent)
|
||||
m_acceptDelayTimer(new QTimer(this)),
|
||||
m_regionInter(new DRegionMonitor(this))
|
||||
{
|
||||
setMargin(0);
|
||||
m_acceptDelayTimer->setSingleShot(true);
|
||||
m_acceptDelayTimer->setInterval(100);
|
||||
|
||||
|
@ -61,7 +61,7 @@ MultiScreenWorker::MultiScreenWorker(QWidget *parent, DWindowManagerHelper *help
|
||||
, m_autoHide(true)
|
||||
, m_btnPress(false)
|
||||
{
|
||||
qDebug() << "init dock screen: " << m_ds.current();
|
||||
qInfo() << "init dock screen: " << m_ds.current();
|
||||
initMembers();
|
||||
initGSettingConfig();
|
||||
initDBus();
|
||||
@ -354,7 +354,7 @@ void MultiScreenWorker::primaryScreenChanged()
|
||||
|
||||
// 无效值
|
||||
if (screenRawHeight == 0 || screenRawWidth == 0) {
|
||||
qDebug() << "screen raw data is not valid:" << screenRawHeight << screenRawWidth;
|
||||
qWarning() << "screen raw data is not valid:" << screenRawHeight << screenRawWidth;
|
||||
return;
|
||||
}
|
||||
|
||||
@ -439,7 +439,7 @@ void MultiScreenWorker::onDisplayModeChanged()
|
||||
if (displayMode == m_displayMode)
|
||||
return;
|
||||
|
||||
qDebug() << "display mode change:" << displayMode;
|
||||
qInfo() << "display mode change:" << displayMode;
|
||||
|
||||
m_displayMode = displayMode;
|
||||
|
||||
@ -474,7 +474,7 @@ void MultiScreenWorker::onHideModeChanged()
|
||||
if (m_hideMode == hideMode)
|
||||
return;
|
||||
|
||||
qDebug() << "hidemode change:" << hideMode;
|
||||
qInfo() << "hidemode change:" << hideMode;
|
||||
|
||||
m_hideMode = hideMode;
|
||||
|
||||
@ -503,7 +503,7 @@ void MultiScreenWorker::onHideStateChanged()
|
||||
// 检查当前屏幕的当前位置是否允许显示,不允许需要更新显示信息(这里应该在函数外部就处理好,不应该走到这里)
|
||||
Monitor *currentMonitor = monitorByName(m_mtrInfo.validMonitor(), m_ds.current());
|
||||
if (!currentMonitor) {
|
||||
qDebug() << "cannot find monitor by name: " << m_ds.current();
|
||||
qWarning() << "cannot find monitor by name: " << m_ds.current();
|
||||
return;
|
||||
}
|
||||
|
||||
@ -512,7 +512,7 @@ void MultiScreenWorker::onHideStateChanged()
|
||||
m_ds.updateDockedScreen(getValidScreen(m_position));
|
||||
}
|
||||
|
||||
qDebug() << "hidestate change:" << m_hideMode << m_hideState;
|
||||
qInfo() << "hidestate change:" << m_hideMode << m_hideState;
|
||||
|
||||
if (m_hideMode == HideMode::KeepShowing
|
||||
|| ((m_hideMode == HideMode::KeepHidden || m_hideMode == HideMode::SmartHide) && m_hideState == HideState::Show)) {
|
||||
@ -730,7 +730,12 @@ void MultiScreenWorker::onRequestNotifyWindowManager()
|
||||
static QRect lastRect = QRect();
|
||||
|
||||
const auto ratio = qApp->devicePixelRatio();
|
||||
const QRect rect = getDockShowGeometry(m_ds.current(), m_position, m_displayMode);
|
||||
QRect rect;
|
||||
if (m_hideMode == HideMode::KeepShowing) {
|
||||
rect = getDockShowGeometry(m_ds.current(), m_position, m_displayMode);
|
||||
} else {
|
||||
rect = getDockHideGeometry(m_ds.current(), m_position, m_displayMode);
|
||||
}
|
||||
|
||||
// 已经设置过了,避免重复设置
|
||||
if (rect == lastRect)
|
||||
@ -753,7 +758,7 @@ void MultiScreenWorker::onRequestNotifyWindowManager()
|
||||
return;
|
||||
}
|
||||
|
||||
qDebug() <<"Update Window WorkArea:" << rect;
|
||||
qInfo() <<"Update Window WorkArea:" << rect;
|
||||
|
||||
const QPoint &p = rawXPosition(rect.topLeft());
|
||||
|
||||
@ -802,11 +807,11 @@ void MultiScreenWorker::onRequestNotifyWindowManager()
|
||||
|
||||
void MultiScreenWorker::onRequestUpdatePosition(const Position &fromPos, const Position &toPos)
|
||||
{
|
||||
qDebug() << "request change pos from: " << fromPos << " to: " << toPos;
|
||||
qInfo() << "request change pos from: " << fromPos << " to: " << toPos;
|
||||
// 更新要切换到的屏幕
|
||||
m_ds.updateDockedScreen(getValidScreen(m_position));
|
||||
|
||||
qDebug() << "update allow screen: " << m_ds.current();
|
||||
qInfo() << "update allow screen: " << m_ds.current();
|
||||
|
||||
// 无论什么模式,都先显示
|
||||
changeDockPosition(m_ds.last(), m_ds.current(), fromPos, toPos);
|
||||
@ -817,7 +822,7 @@ void MultiScreenWorker::onRequestUpdateMonitorInfo()
|
||||
// 双屏,复制模式,两个屏幕的信息是一样的
|
||||
if (m_mtrInfo.validMonitor().size() == 2
|
||||
&& m_mtrInfo.validMonitor().first()->rect() == m_mtrInfo.validMonitor().last()->rect()) {
|
||||
qDebug() << "repeat screen";
|
||||
qInfo() << "repeat screen";
|
||||
return;
|
||||
}
|
||||
|
||||
@ -839,7 +844,7 @@ void MultiScreenWorker::updateMonitorDockedInfo()
|
||||
|
||||
// 最多支持双屏,这里只计算双屏,单屏默认四边均可停靠任务栏
|
||||
if (screens.size() != 2) {
|
||||
qDebug() << "screen count:" << screens.count();
|
||||
qInfo() << "screen count:" << screens.count();
|
||||
return;
|
||||
}
|
||||
|
||||
@ -849,7 +854,7 @@ void MultiScreenWorker::updateMonitorDockedInfo()
|
||||
qFatal("shouldn't be here");
|
||||
}
|
||||
|
||||
qDebug() << "monitor info changed" << s1->rect() << s2->rect();
|
||||
qInfo() << "monitor info changed" << s1->rect() << s2->rect();
|
||||
|
||||
// 先重置
|
||||
s1->dockPosition().reset();
|
||||
@ -911,7 +916,7 @@ void MultiScreenWorker::onRequestDelayShowDock(const QString &screenName)
|
||||
// 复制模式.不需要响应切换屏幕
|
||||
QList<Monitor *> monitorList = m_mtrInfo.validMonitor();
|
||||
if (monitorList.size() == 2 && monitorList.first()->rect() == monitorList.last()->rect()) {
|
||||
qDebug() << "copy mode or merge mode";
|
||||
qInfo() << "copy mode or merge mode";
|
||||
parent()->setFixedSize(dockRect(m_ds.current()).size());
|
||||
parent()->setGeometry(dockRect(m_ds.current()));
|
||||
return;
|
||||
@ -921,7 +926,7 @@ void MultiScreenWorker::onRequestDelayShowDock(const QString &screenName)
|
||||
|
||||
Monitor *currentMonitor = monitorByName(m_mtrInfo.validMonitor(), screenName);
|
||||
if (!currentMonitor) {
|
||||
qDebug() << "cannot find monitor by name: " << screenName;
|
||||
qWarning() << "cannot find monitor by name: " << screenName;
|
||||
return;
|
||||
}
|
||||
|
||||
@ -956,16 +961,16 @@ void MultiScreenWorker::initGSettingConfig()
|
||||
if (m_monitorSetting->keys().contains(MonitorsSwitchTime)) {
|
||||
m_delayTimer->setInterval(m_monitorSetting->get(MonitorsSwitchTime).toInt());
|
||||
} else {
|
||||
qDebug() << "can not find key:" << MonitorsSwitchTime;
|
||||
qWarning() << "can not find key:" << MonitorsSwitchTime;
|
||||
}
|
||||
|
||||
if (m_monitorSetting->keys().contains(OnlyShowPrimary)) {
|
||||
m_mtrInfo.setShowInPrimary(m_monitorSetting->get(OnlyShowPrimary).toBool());
|
||||
} else {
|
||||
qDebug() << "can not find key:" << OnlyShowPrimary;
|
||||
qWarning() << "can not find key:" << OnlyShowPrimary;
|
||||
}
|
||||
} else {
|
||||
qDebug() << "com.deepin.dde.dock is uninstalled.";
|
||||
qWarning() << "com.deepin.dde.dock is uninstalled.";
|
||||
}
|
||||
}
|
||||
|
||||
@ -1225,7 +1230,7 @@ void MultiScreenWorker::displayAnimation(const QString &screen, AniAction act)
|
||||
void MultiScreenWorker::changeDockPosition(QString fromScreen, QString toScreen, const Position &fromPos, const Position &toPos)
|
||||
{
|
||||
if (fromScreen == toScreen && fromPos == toPos) {
|
||||
qDebug() << "shouldn't be here,nothing happend!";
|
||||
qWarning() << "shouldn't be here,nothing happend!";
|
||||
return;
|
||||
}
|
||||
|
||||
@ -1233,7 +1238,7 @@ void MultiScreenWorker::changeDockPosition(QString fromScreen, QString toScreen,
|
||||
m_ds.updateDockedScreen(toScreen);
|
||||
|
||||
// TODO: 考虑切换过快的情况,这里需要停止上一次的动画,可增加信号控制,暂时无需要
|
||||
qDebug() << "from: " << fromScreen << " to: " << toScreen;
|
||||
qInfo() << "from: " << fromScreen << " to: " << toScreen;
|
||||
|
||||
QSequentialAnimationGroup *group = new QSequentialAnimationGroup(this);
|
||||
|
||||
@ -1328,7 +1333,7 @@ void MultiScreenWorker::updateDockScreenName(const QString &screenName)
|
||||
|
||||
m_ds.updateDockedScreen(getValidScreen(m_position));
|
||||
|
||||
qDebug() << "update dock screen: " << m_ds.current();
|
||||
qInfo() << "update dock screen: " << m_ds.current();
|
||||
}
|
||||
|
||||
QString MultiScreenWorker::getValidScreen(const Position &pos)
|
||||
@ -1344,14 +1349,14 @@ QString MultiScreenWorker::getValidScreen(const Position &pos)
|
||||
}
|
||||
|
||||
if (primaryName.isEmpty()) {
|
||||
qDebug() << "cannnot find primary screen, wait for 3s to update...";
|
||||
qWarning() << "cannnot find primary screen, wait for 3s to update...";
|
||||
QTimer::singleShot(3000, this, &MultiScreenWorker::requestUpdateMonitorInfo);
|
||||
return QString();
|
||||
}
|
||||
|
||||
Monitor *primaryMonitor = monitorByName(m_mtrInfo.validMonitor(), primaryName);
|
||||
if (!primaryMonitor) {
|
||||
qDebug() << "cannot find monitor by name: " << primaryName;
|
||||
qWarning() << "cannot find monitor by name: " << primaryName;
|
||||
return QString();
|
||||
}
|
||||
|
||||
@ -1375,7 +1380,7 @@ void MultiScreenWorker::resetDockScreen()
|
||||
if (monitorList.size() == 2) {
|
||||
Monitor *primaryMonitor = monitorByName(m_mtrInfo.validMonitor(), m_ds.primary());
|
||||
if (!primaryMonitor) {
|
||||
qDebug() << "cannot find monitor by name: " << m_ds.primary();
|
||||
qWarning() << "cannot find monitor by name: " << m_ds.primary();
|
||||
return;
|
||||
}
|
||||
if (!primaryMonitor->dockPosition().docked(position())) {
|
||||
@ -1383,7 +1388,7 @@ void MultiScreenWorker::resetDockScreen()
|
||||
if (monitor->name() != m_ds.current()
|
||||
&& monitor->dockPosition().docked(position())) {
|
||||
m_ds.updateDockedScreen(monitor->name());
|
||||
qDebug() << "update dock screen: " << monitor->name();
|
||||
qInfo() << "update dock screen: " << monitor->name();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1826,14 +1831,14 @@ void MultiScreenWorker::onTouchRelease(int type, int x, int y, const QString &ke
|
||||
void MultiScreenWorker::tryToShowDock(int eventX, int eventY)
|
||||
{
|
||||
if (m_draging || m_aniStart) {
|
||||
qDebug() << "dock is draging or animation is running";
|
||||
qWarning() << "dock is draging or animation is running";
|
||||
return;
|
||||
}
|
||||
|
||||
QString toScreen;
|
||||
QScreen *screen = Utils::screenAtByScaled(QPoint(eventX, eventY));
|
||||
if (!screen) {
|
||||
qDebug() << "cannot find the screen" << QPoint(eventX, eventY);
|
||||
qWarning() << "cannot find the screen" << QPoint(eventX, eventY);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -28,7 +28,7 @@ void StateButton::paintEvent(QPaintEvent *event)
|
||||
painter.setBrush(palette().color(QPalette::Highlight));
|
||||
painter.drawPie(rect(), 0, 360 * 16);
|
||||
|
||||
QPen pen(palette().color(QPalette::Text), radius / 100.0 * 6.20, Qt::SolidLine, Qt::SquareCap, Qt::MiterJoin);
|
||||
QPen pen(Qt::white, radius / 100.0 * 6.20, Qt::SolidLine, Qt::SquareCap, Qt::MiterJoin);
|
||||
switch (m_type) {
|
||||
case Check: drawCheck(painter, pen, radius); break;
|
||||
case Fork: drawFork(painter, pen, radius); break;
|
||||
|
@ -134,9 +134,14 @@ const QPixmap ThemeAppIcon::getIcon(const QString iconName, const int size, cons
|
||||
|
||||
icon = QIcon::fromTheme(iconName);
|
||||
if (icon.isNull()) {
|
||||
icon = QIcon::fromTheme("deepinwine-" + iconName);
|
||||
} else {
|
||||
icon = QIcon::fromTheme(iconName, QIcon::fromTheme("application-x-desktop"));
|
||||
//手动更新图标缓存
|
||||
system("gtk-update-icon-cache /usr/share/icons/hicolor/");
|
||||
|
||||
icon = QIcon::fromTheme(iconName);
|
||||
}
|
||||
|
||||
if(icon.isNull()) {
|
||||
icon = QIcon::fromTheme("application-x-desktop");
|
||||
}
|
||||
|
||||
// load pixmap from Icon-Theme
|
||||
|
@ -82,6 +82,47 @@ inline bool isSettingConfigured(const QString& id, const QString& path, const QS
|
||||
}
|
||||
return v.toBool();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 比较两个插件版本号的大小
|
||||
* @param pluginApi1 第一个插件版本号
|
||||
* @param pluginApi2 第二个插件版本号
|
||||
* @return 0:两个版本号相等,1:第一个版本号大,-1:第二个版本号大
|
||||
*/
|
||||
inline int comparePluginApi(const QString &pluginApi1, const QString &pluginApi2) {
|
||||
// 版本号相同
|
||||
if (pluginApi1 == pluginApi2)
|
||||
return 0;
|
||||
|
||||
// 拆分版本号
|
||||
QStringList subPluginApis1 = pluginApi1.split(".", QString::SkipEmptyParts, Qt::CaseSensitive);
|
||||
QStringList subPluginApis2 = pluginApi2.split(".", QString::SkipEmptyParts, Qt::CaseSensitive);
|
||||
for (int i = 0; i < subPluginApis1.size(); ++i) {
|
||||
auto subPluginApi1 = subPluginApis1[i];
|
||||
if (subPluginApis2.size() > i) {
|
||||
auto subPluginApi2 = subPluginApis2[i];
|
||||
|
||||
// 相等判断下一个子版本号
|
||||
if (subPluginApi1 == subPluginApi2)
|
||||
continue;
|
||||
|
||||
// 转成整形比较
|
||||
if (subPluginApi1.toInt() > subPluginApi2.toInt()) {
|
||||
return 1;
|
||||
} else {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 循环结束但是没有返回,说明子版本号个数不同,且前面的子版本号都相同
|
||||
// 子版本号多的版本号大
|
||||
if (subPluginApis1.size() > subPluginApis2.size()) {
|
||||
return 1;
|
||||
} else {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endif // UTILS
|
||||
|
@ -4,6 +4,7 @@
|
||||
#include "../panel/mainpanelcontrol.h"
|
||||
#include "../../widgets/tipswidget.h"
|
||||
#include "../util/dockpopupwindow.h"
|
||||
#include "util/statebutton.h"
|
||||
|
||||
#include "../item/launcheritem.h"
|
||||
#include "../item/appitem.h"
|
||||
@ -28,8 +29,6 @@
|
||||
#include "../plugins/tray/fashiontray/containers/normalcontainer.h"
|
||||
#include "../plugins/tray/fashiontray/containers/spliteranimated.h"
|
||||
|
||||
#include "../plugins/show-desktop/showdesktopwidget.h"
|
||||
|
||||
// 这部分由sound插件单独维护,这样做是因为在标记volumeslider这个类时,需要用到其setValue的实现,
|
||||
// 但插件的源文件dock这边并没有包含,不想引入复杂的包含关系,其实最好的做法就是像sound插件这样,谁维护谁的
|
||||
//#include "../plugins/sound/sounditem.h"
|
||||
@ -38,6 +37,10 @@
|
||||
//#include "../plugins/sound/componments/volumeslider.h"
|
||||
//#include "../plugins/sound/componments/horizontalseparator.h"
|
||||
|
||||
#include "../plugins/show-desktop/showdesktopwidget.h"
|
||||
#include "../plugins/bluetooth/componments/deviceitem.h"
|
||||
#include "../plugins/network/networkitem.h"
|
||||
#include "../plugins/network/item/applet/devicecontrolwidget.h"
|
||||
#include "../plugins/datetime/datetimewidget.h"
|
||||
#include "../plugins/onboard/onboarditem.h"
|
||||
#include "../plugins/trash/trashwidget.h"
|
||||
@ -49,6 +52,12 @@
|
||||
#include <DIconButton>
|
||||
#include <DSwitchButton>
|
||||
#include <DPushButton>
|
||||
#include <DListView>
|
||||
#include <DSwitchButton>
|
||||
#include <DSpinner>
|
||||
#include <dloadingindicator.h>
|
||||
|
||||
#include <QScrollBar>
|
||||
|
||||
DWIDGET_USE_NAMESPACE
|
||||
using namespace Dock;
|
||||
@ -67,11 +76,11 @@ SET_BUTTON_ACCESSIBLE(PlaceholderItem, "placeholderitem")
|
||||
SET_BUTTON_ACCESSIBLE(AppDragWidget, "appdragwidget")
|
||||
SET_BUTTON_ACCESSIBLE(AppSnapshot, "appsnapshot")
|
||||
SET_BUTTON_ACCESSIBLE(FloatingPreview, "floatingpreview")
|
||||
SET_BUTTON_ACCESSIBLE(XEmbedTrayWidget, m_w->itemKeyForConfig().replace("sni:",""))
|
||||
SET_BUTTON_ACCESSIBLE(IndicatorTrayWidget, m_w->itemKeyForConfig().replace("sni:",""))
|
||||
SET_BUTTON_ACCESSIBLE(SNITrayWidget, m_w->itemKeyForConfig().replace("sni:",""))
|
||||
SET_BUTTON_ACCESSIBLE(AbstractTrayWidget, m_w->itemKeyForConfig().replace("sni:",""))
|
||||
SET_BUTTON_ACCESSIBLE(SystemTrayItem, m_w->itemKeyForConfig().replace("sni:",""))
|
||||
SET_BUTTON_ACCESSIBLE(XEmbedTrayWidget, m_w->itemKeyForConfig().replace("sni:", ""))
|
||||
SET_BUTTON_ACCESSIBLE(IndicatorTrayWidget, m_w->itemKeyForConfig().replace("sni:", ""))
|
||||
SET_BUTTON_ACCESSIBLE(SNITrayWidget, m_w->itemKeyForConfig().replace("sni:", ""))
|
||||
SET_BUTTON_ACCESSIBLE(AbstractTrayWidget, m_w->itemKeyForConfig().replace("sni:", ""))
|
||||
SET_BUTTON_ACCESSIBLE(SystemTrayItem, m_w->itemKeyForConfig().replace("sni:", ""))
|
||||
SET_FORM_ACCESSIBLE(FashionTrayItem, "fashiontrayitem")
|
||||
SET_FORM_ACCESSIBLE(FashionTrayWidgetWrapper, "fashiontraywrapper")
|
||||
SET_BUTTON_ACCESSIBLE(FashionTrayControlWidget, "fashiontraycontrolwidget")
|
||||
@ -97,8 +106,30 @@ SET_LABEL_ACCESSIBLE(QLabel, m_w->objectName() == "notifications" ? m_w->objectN
|
||||
SET_BUTTON_ACCESSIBLE(DIconButton, m_w->objectName().isEmpty() ? "imagebutton" : m_w->objectName())
|
||||
SET_BUTTON_ACCESSIBLE(DSwitchButton, m_w->text().isEmpty() ? "switchbutton" : m_w->text())
|
||||
SET_BUTTON_ACCESSIBLE(DesktopWidget, "desktopWidget");
|
||||
// 几个没什么用的标记,但为了提醒大家不要遗漏标记控件,还是不要去掉
|
||||
SET_FORM_ACCESSIBLE(DBlurEffectWidget, "DBlurEffectWidget")
|
||||
SET_FORM_ACCESSIBLE(DListView, "DListView")
|
||||
SET_FORM_ACCESSIBLE(DLoadingIndicator, "DLoadingIndicator")
|
||||
SET_FORM_ACCESSIBLE(DSpinner, "DSpinner")
|
||||
SET_FORM_ACCESSIBLE(QMenu, "QMenu")
|
||||
SET_FORM_ACCESSIBLE(QPushButton, "QPushButton")
|
||||
SET_FORM_ACCESSIBLE(QSlider, "QSlider")
|
||||
SET_FORM_ACCESSIBLE(QScrollBar, "QScrollBar")
|
||||
SET_FORM_ACCESSIBLE(QScrollArea, "QScrollArea")
|
||||
SET_FORM_ACCESSIBLE(QFrame, "QFrame")
|
||||
SET_FORM_ACCESSIBLE(QGraphicsView, "QGraphicsView")
|
||||
SET_FORM_ACCESSIBLE(DragWidget, "DragWidget")
|
||||
SET_FORM_ACCESSIBLE(MenueItem, "MenueItem")
|
||||
SET_FORM_ACCESSIBLE(NetworkItem, "NetworkItem")
|
||||
SET_FORM_ACCESSIBLE(DeviceItem, "DeviceItem")
|
||||
SET_FORM_ACCESSIBLE(StateButton, "StateButton")
|
||||
SET_FORM_ACCESSIBLE(DeviceControlWidget, "DeviceControlWidget")
|
||||
|
||||
QAccessibleInterface *accessibleFactory(const QString &classname, QObject *object)
|
||||
{
|
||||
// 自动化标记确定不需要的控件,方可加入忽略列表
|
||||
const static QStringList ignoreLst = {"WirelessItem", "WiredItem", "SsidButton", "WirelessList", "AccessPointWidget"};
|
||||
|
||||
QAccessibleInterface *interface = nullptr;
|
||||
|
||||
USE_ACCESSIBLE(classname, MainWindow);
|
||||
@ -126,11 +157,11 @@ QAccessibleInterface *accessibleFactory(const QString &classname, QObject *objec
|
||||
USE_ACCESSIBLE(classname, SpliterAnimated);
|
||||
USE_ACCESSIBLE(classname, IndicatorTrayWidget);
|
||||
USE_ACCESSIBLE(classname, XEmbedTrayWidget);
|
||||
// USE_ACCESSIBLE(classname, SoundItem);
|
||||
// USE_ACCESSIBLE(classname, SoundApplet);
|
||||
// USE_ACCESSIBLE(classname, SinkInputWidget);
|
||||
// USE_ACCESSIBLE(classname, VolumeSlider);
|
||||
// USE_ACCESSIBLE(classname, HorizontalSeparator);
|
||||
// USE_ACCESSIBLE(classname, SoundItem);
|
||||
// USE_ACCESSIBLE(classname, SoundApplet);
|
||||
// USE_ACCESSIBLE(classname, SinkInputWidget);
|
||||
// USE_ACCESSIBLE(classname, VolumeSlider);
|
||||
// USE_ACCESSIBLE(classname, HorizontalSeparator);
|
||||
USE_ACCESSIBLE(classname, DesktopWidget);
|
||||
USE_ACCESSIBLE(classname, DatetimeWidget);
|
||||
USE_ACCESSIBLE(classname, OnboardItem);
|
||||
@ -148,6 +179,32 @@ QAccessibleInterface *accessibleFactory(const QString &classname, QObject *objec
|
||||
USE_ACCESSIBLE_BY_OBJECTNAME(QString(classname).replace("Dtk::Widget::", ""), DIconButton, "closebutton-2d");
|
||||
USE_ACCESSIBLE_BY_OBJECTNAME(QString(classname).replace("Dtk::Widget::", ""), DIconButton, "closebutton-3d");
|
||||
USE_ACCESSIBLE_BY_OBJECTNAME(QString(classname).replace("Dtk::Widget::", ""), DSwitchButton, "");
|
||||
USE_ACCESSIBLE(QString(classname).replace("Dtk::Widget::", ""), DBlurEffectWidget);
|
||||
USE_ACCESSIBLE(QString(classname).replace("Dtk::Widget::", ""), DListView);
|
||||
USE_ACCESSIBLE(QString(classname).replace("Dtk::Widget::", ""), DLoadingIndicator);
|
||||
USE_ACCESSIBLE(QString(classname).replace("Dtk::Widget::", ""), DSpinner);
|
||||
USE_ACCESSIBLE(QString(classname).replace("Dtk::Widget::", ""), DSwitchButton);
|
||||
USE_ACCESSIBLE(QString(classname).replace("Dtk::Widget::", ""), DIconButton);
|
||||
USE_ACCESSIBLE(classname, QMenu);
|
||||
USE_ACCESSIBLE(classname, QPushButton);
|
||||
USE_ACCESSIBLE(classname, QSlider);
|
||||
USE_ACCESSIBLE(classname, QScrollBar);
|
||||
USE_ACCESSIBLE(classname, QScrollArea);
|
||||
USE_ACCESSIBLE(classname, QFrame);
|
||||
USE_ACCESSIBLE(classname, QGraphicsView);
|
||||
USE_ACCESSIBLE(classname, DragWidget);
|
||||
USE_ACCESSIBLE(classname, MenueItem);
|
||||
USE_ACCESSIBLE(classname, NetworkItem);
|
||||
USE_ACCESSIBLE(classname, DeviceItem);
|
||||
USE_ACCESSIBLE(classname, StateButton);
|
||||
USE_ACCESSIBLE(classname, DeviceControlWidget);
|
||||
|
||||
if (!interface && object->inherits("QWidget") && !ignoreLst.contains(classname)) {
|
||||
QWidget *w = static_cast<QWidget *>(object);
|
||||
// 如果你崩溃到这里,说明你修改的代码未兼顾到accessible功能,请修改通过后再提交
|
||||
if (w->accessibleName().isEmpty())
|
||||
Q_ASSERT_X(!w || !w->accessibleName().isEmpty(), "accessibleFactory()", QString("Class: " + classname + " cannot access").toLatin1().data());
|
||||
}
|
||||
|
||||
return interface;
|
||||
}
|
||||
|
@ -21,7 +21,7 @@
|
||||
|
||||
// 为了方便使用,把相关定义独立出来,如有需要,直接包含这个头文件,然后使用SET_*的宏去设置,USE_*宏开启即可
|
||||
// 注意:对项目中出现的所有的QWidget的派生类都要再启用一次accessiblity,包括qt的原生控件[qt未限制其标记名称为空的情况]
|
||||
// 注意:使用USE_ACCESSIBLE_BY_OBJECTNAME开启accessiblity的时候,一定要再最这个类用一下USE_ACCESSIBLE,否则标记可能会遗漏
|
||||
// 注意:使用USE_ACCESSIBLE_BY_OBJECTNAME开启accessiblity的时候,一定要再对这个类用一下USE_ACCESSIBLE,否则标记可能会遗漏
|
||||
|
||||
#ifndef ACCESSIBLEINTERFACE_H
|
||||
#define ACCESSIBLEINTERFACE_H
|
||||
@ -314,7 +314,7 @@ inline QString getAccessibleName(QWidget *w, QAccessible::Role r, const QString
|
||||
public:\
|
||||
FUNC_CREATE(classname,QAccessible::EditableText,accessdescription)\
|
||||
QString text(QAccessible::Text t) const override;\
|
||||
QAccessibleInterface *child(int index) const override { return nullptr; }\
|
||||
QAccessibleInterface *child(int index) const override { Q_UNUSED(index); return nullptr; }\
|
||||
void *interface_cast(QAccessible::InterfaceType t) override{\
|
||||
switch (t) {\
|
||||
case QAccessible::ActionInterface:\
|
||||
@ -338,7 +338,7 @@ inline QString getAccessibleName(QWidget *w, QAccessible::Role r, const QString
|
||||
Q_UNUSED(startOffset)\
|
||||
Q_UNUSED(endOffset)\
|
||||
}\
|
||||
void removeSelection(int selectionIndex) override {}\
|
||||
void removeSelection(int selectionIndex) override { Q_UNUSED(selectionIndex);}\
|
||||
void setSelection(int selectionIndex, int startOffset, int endOffset) override {\
|
||||
Q_UNUSED(selectionIndex)\
|
||||
Q_UNUSED(startOffset)\
|
||||
@ -371,7 +371,7 @@ inline QString getAccessibleName(QWidget *w, QAccessible::Role r, const QString
|
||||
void deleteText(int startOffset, int endOffset) override {\
|
||||
Q_UNUSED(startOffset)\
|
||||
Q_UNUSED(endOffset)\
|
||||
};\
|
||||
}\
|
||||
void replaceText(int startOffset, int endOffset, const QString &text) override {\
|
||||
Q_UNUSED(startOffset)\
|
||||
Q_UNUSED(endOffset)\
|
||||
|
17
gen_report.sh
Executable file
@ -0,0 +1,17 @@
|
||||
#!/bin/bash
|
||||
|
||||
# 需要先安装lcov,打开./unittest/CMakeLists.txt 测试覆盖率的编译条件
|
||||
# 将该脚本放置到dde-dock-unit_test二进制文件同级目录运行
|
||||
lcov -c -i -d ./ -o init.info
|
||||
./dde_dock_unit_test
|
||||
lcov -c -d ./ -o cover.info
|
||||
lcov -a init.info -a cover.info -o total.info
|
||||
lcov --remove total.info '*/usr/include/*' '*/usr/lib/*' '*/usr/lib64/*' '*/usr/local/include/*' '*/usr/local/lib/*' '*/usr/local/lib64/*' '*/third/*' 'testa.cpp' -o final.info
|
||||
|
||||
# 生成报告
|
||||
genhtml -o cover_report --legend --title "lcov" --prefix=./ final.info
|
||||
|
||||
#打开报告
|
||||
nohup x-www-browser ./cover_report/index.html &
|
||||
|
||||
exit 0
|
@ -27,7 +27,7 @@
|
||||
namespace Dock {
|
||||
|
||||
#define DOCK_PLUGIN_MIME "dock/plugin"
|
||||
#define DOCK_PLUGIN_API_VERSION "1.2.2"
|
||||
#define DOCK_PLUGIN_API_VERSION "1.2.3"
|
||||
|
||||
#define PROP_DISPLAY_MODE "DisplayMode"
|
||||
|
||||
|
@ -40,6 +40,14 @@ public:
|
||||
Fixed
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief Plugin size policy
|
||||
*/
|
||||
enum PluginSizePolicy {
|
||||
System = 1 << 0, // Follow the system
|
||||
Custom = 1 << 1 // The custom
|
||||
};
|
||||
|
||||
///
|
||||
/// \brief ~PluginsItemInterface
|
||||
/// DON'T try to delete m_proxyInter.
|
||||
@ -229,6 +237,12 @@ public:
|
||||
///
|
||||
virtual PluginType type() { return Normal; }
|
||||
|
||||
///
|
||||
/// \brief plugin size policy
|
||||
/// default plugin size policy
|
||||
///
|
||||
virtual PluginSizePolicy pluginSizePolicy() const { return System; }
|
||||
|
||||
protected:
|
||||
///
|
||||
/// \brief m_proxyInter
|
||||
|
@ -64,9 +64,11 @@ BluetoothApplet::BluetoothApplet(QWidget *parent)
|
||||
, m_adapterLayout(new QVBoxLayout)
|
||||
, m_menueLayout(new QHBoxLayout)
|
||||
, m_openControlCenter(new MenueItem(this))
|
||||
, m_textLayout(new QVBoxLayout)
|
||||
, m_adaptersManager(new AdaptersManager(this))
|
||||
{
|
||||
m_line->setVisible(false);
|
||||
m_adapterLayout->setContentsMargins(0, 0, 0, 0);
|
||||
|
||||
QFont defaultFont = font();
|
||||
auto titlefont = QFont(defaultFont.family(), defaultFont.pointSize() + 2);
|
||||
@ -77,6 +79,8 @@ BluetoothApplet::BluetoothApplet(QWidget *parent)
|
||||
m_appletName->setVisible(false);
|
||||
|
||||
m_openControlCenter->setText(tr("Bluetooth settings"));
|
||||
m_textLayout->addWidget(m_openControlCenter);
|
||||
m_textLayout->setContentsMargins(10, 0, 0, 0);
|
||||
initFontColor(m_openControlCenter);
|
||||
m_openControlCenter->setFixedHeight(ITEMHEIGHT);
|
||||
m_openControlCenter->setVisible(false);
|
||||
@ -97,13 +101,14 @@ BluetoothApplet::BluetoothApplet(QWidget *parent)
|
||||
m_centrealLayout->addLayout(appletNameLayout);
|
||||
m_centrealLayout->addWidget(m_line);
|
||||
m_centrealLayout->addLayout(m_adapterLayout);
|
||||
m_centrealLayout->addWidget(m_openControlCenter);
|
||||
m_centrealLayout->addLayout(m_textLayout);
|
||||
m_centralWidget->setLayout(m_centrealLayout);
|
||||
m_centralWidget->setFixedWidth(POPUPWIDTH);
|
||||
m_centralWidget->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred);
|
||||
|
||||
setFixedWidth(POPUPWIDTH);
|
||||
setWidget(m_centralWidget);
|
||||
setContentsMargins(0, 0, 0, 0);
|
||||
setFrameShape(QFrame::NoFrame);
|
||||
setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
||||
setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
||||
|
@ -72,6 +72,7 @@ private:
|
||||
QVBoxLayout *m_adapterLayout;
|
||||
QHBoxLayout *m_menueLayout;
|
||||
MenueItem *m_openControlCenter;
|
||||
QVBoxLayout *m_textLayout;
|
||||
|
||||
AdaptersManager *m_adaptersManager;
|
||||
|
||||
|
@ -104,8 +104,9 @@ void Adapter::updateDevice(const QJsonObject &dviceJson)
|
||||
device->setName(name);
|
||||
device->setPaired(paired);
|
||||
device->setRssi(rssi);
|
||||
device->setState(state);
|
||||
//setState放后面,是因为用到了connectState,fix bug 55245
|
||||
device->setConnectState(connectState);
|
||||
device->setState(state);
|
||||
device->setDeviceType(bluetoothDeviceType);
|
||||
}
|
||||
}
|
||||
|
@ -50,7 +50,7 @@ AdapterItem::AdapterItem(AdaptersManager *adapterManager, Adapter *adapter, QWid
|
||||
m_switchItem->setChecked(adapter->powered(),false);
|
||||
m_switchItem->setLoading(adapter->discover());
|
||||
|
||||
m_deviceLayout->addWidget(m_switchItem);
|
||||
m_deviceLayout->addWidget(m_switchItem, Qt::AlignCenter);
|
||||
m_deviceLayout->addWidget(m_line);
|
||||
m_centralWidget->setFixedWidth(POPUPWIDTH);
|
||||
m_centralWidget->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred);
|
||||
|
@ -247,6 +247,10 @@ void AdaptersManager::adapterAdd(Adapter *adapter, const QJsonObject &adpterObj)
|
||||
|
||||
QString id = adapter->id();
|
||||
if (!id.isEmpty()) {
|
||||
// in case memory leaks
|
||||
if (m_adapters.contains(id)) {
|
||||
return;
|
||||
}
|
||||
m_adapters[id] = adapter;
|
||||
}
|
||||
}
|
||||
|
@ -4,6 +4,7 @@
|
||||
#define POPUPWIDTH (200)
|
||||
#define ITEMHEIGHT (30)
|
||||
#define CONTROLHEIGHT (35)
|
||||
#define CONTROLTITLEHEIGHT (45)
|
||||
#define LIGHTSUFFIX ("_dark.svg")
|
||||
#define DARKSUFFIX (".svg")
|
||||
#define MARGIN (12)
|
||||
|
@ -80,14 +80,10 @@ DeviceItem::DeviceItem(Device *d, QWidget *parent)
|
||||
m_title->setText(nameDecorated(m_device->name()));
|
||||
initFontColor(m_title);
|
||||
|
||||
m_line->setVisible(true);
|
||||
m_line->setVisible(false);
|
||||
m_loadingStat->setFixedSize(20, 20);
|
||||
m_loadingStat->setVisible(false);
|
||||
|
||||
auto deviceLayout = new QVBoxLayout;
|
||||
deviceLayout->setMargin(0);
|
||||
deviceLayout->setSpacing(0);
|
||||
deviceLayout->addWidget(m_line);
|
||||
auto itemLayout = new QHBoxLayout;
|
||||
itemLayout->setMargin(0);
|
||||
itemLayout->setSpacing(0);
|
||||
@ -99,8 +95,7 @@ DeviceItem::DeviceItem(Device *d, QWidget *parent)
|
||||
itemLayout->addWidget(m_state);
|
||||
itemLayout->addWidget(m_loadingStat);
|
||||
itemLayout->addSpacing(MARGIN);
|
||||
deviceLayout->addLayout(itemLayout);
|
||||
setLayout(deviceLayout);
|
||||
setLayout(itemLayout);
|
||||
|
||||
connect(DGuiApplicationHelper::instance(), &DGuiApplicationHelper::themeTypeChanged, this, themeChanged);
|
||||
|
||||
@ -124,6 +119,18 @@ void DeviceItem::mousePressEvent(QMouseEvent *event)
|
||||
QWidget::mousePressEvent(event);
|
||||
}
|
||||
|
||||
void DeviceItem::paintEvent(QPaintEvent *e)
|
||||
{
|
||||
if (LightType == DApplicationHelper::instance()->themeType()) {
|
||||
QPainter painter(this);
|
||||
QRect rc = rect();
|
||||
rc.moveTop(1);
|
||||
painter.fillRect(rc, QColor(255, 255, 255, 51));
|
||||
|
||||
QWidget::paintEvent(e);
|
||||
}
|
||||
}
|
||||
|
||||
void DeviceItem::changeState(const Device::State state)
|
||||
{
|
||||
switch (state) {
|
||||
@ -159,7 +166,7 @@ QString DeviceItem::nameDecorated(const QString &name)
|
||||
HorizontalSeparator::HorizontalSeparator(QWidget *parent)
|
||||
: QWidget(parent)
|
||||
{
|
||||
setFixedHeight(1);
|
||||
setFixedHeight(2);
|
||||
setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
|
||||
}
|
||||
|
||||
@ -168,7 +175,11 @@ void HorizontalSeparator::paintEvent(QPaintEvent *e)
|
||||
QWidget::paintEvent(e);
|
||||
|
||||
QPainter painter(this);
|
||||
painter.fillRect(rect(), QColor(0, 0, 0, 0));
|
||||
if (LightType == DApplicationHelper::instance()->themeType()) {
|
||||
painter.fillRect(rect(), QColor(0, 0, 0, 10));
|
||||
} else if (DarkType == DApplicationHelper::instance()->themeType()) {
|
||||
painter.fillRect(rect(), QColor(255, 255, 255, 13));
|
||||
}
|
||||
}
|
||||
|
||||
MenueItem::MenueItem(QWidget *parent)
|
||||
|
@ -31,6 +31,12 @@
|
||||
|
||||
DWIDGET_USE_NAMESPACE
|
||||
|
||||
enum ColorType {
|
||||
UnknownType,
|
||||
LightType,
|
||||
DarkType
|
||||
};
|
||||
|
||||
class StateButton;
|
||||
class HorizontalSeparator;
|
||||
class DeviceItem : public QWidget
|
||||
@ -48,6 +54,7 @@ public:
|
||||
|
||||
protected:
|
||||
void mousePressEvent(QMouseEvent *event) override;
|
||||
void paintEvent(QPaintEvent *e) override;
|
||||
|
||||
signals:
|
||||
void clicked(Device *);
|
||||
|
@ -25,6 +25,7 @@
|
||||
|
||||
#include <DHiDPIHelper>
|
||||
#include <DApplicationHelper>
|
||||
#include <DFontSizeManager>
|
||||
|
||||
#include <QHBoxLayout>
|
||||
#include <QFontMetrics>
|
||||
@ -41,6 +42,7 @@ SwitchItem::SwitchItem(QWidget *parent)
|
||||
{
|
||||
initFontColor(m_title);
|
||||
|
||||
DFontSizeManager::instance()->bind(m_title, DFontSizeManager::T4, QFont::Medium);
|
||||
m_switchBtn->setFixedWidth(SWITCHBUTTONWIDTH);
|
||||
|
||||
const QPixmap pixmap = DHiDPIHelper::loadNxPixmap(":/wireless/resources/wireless/refresh_dark.svg");
|
||||
@ -61,7 +63,7 @@ SwitchItem::SwitchItem(QWidget *parent)
|
||||
};
|
||||
themeChanged(DApplicationHelper::instance()->themeType());
|
||||
|
||||
setFixedHeight(CONTROLHEIGHT);
|
||||
setFixedHeight(CONTROLTITLEHEIGHT);
|
||||
auto switchLayout = new QHBoxLayout;
|
||||
switchLayout->setSpacing(0);
|
||||
switchLayout->setMargin(0);
|
||||
@ -71,7 +73,7 @@ SwitchItem::SwitchItem(QWidget *parent)
|
||||
switchLayout->addWidget(m_loadingIndicator);
|
||||
switchLayout->addSpacing(MARGIN);
|
||||
switchLayout->addWidget(m_switchBtn);
|
||||
switchLayout->addSpacing(MARGIN);
|
||||
switchLayout->addSpacing(5);
|
||||
setLayout(switchLayout);
|
||||
|
||||
connect(m_switchBtn, &DSwitchButton::toggled, [&](bool change) {
|
||||
|
@ -1,3 +1,7 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<path fill="#C5CFE0" fill-rule="evenodd" d="M9,3 C9.3147573,3 9.61114562,3.14819416 9.8,3.4 L10.25,4 L13,4 C14.1045695,4 15,4.8954305 15,6 L15,11 C15,12.1045695 14.1045695,13 13,13 L3,13 C1.8954305,13 1,12.1045695 1,11 L1,6 C1,4.8954305 1.8954305,4 3,4 L5.75,4 L6.2,3.4 C6.38885438,3.14819416 6.6852427,3 7,3 L9,3 Z M8,5 C6.06700338,5 4.5,6.56700338 4.5,8.5 C4.5,10.4329966 6.06700338,12 8,12 C9.93299662,12 11.5,10.4329966 11.5,8.5 C11.5,6.56700338 9.93299662,5 8,5 Z M8,6 C9.38071187,6 10.5,7.11928813 10.5,8.5 C10.5,9.88071187 9.38071187,11 8,11 C6.61928813,11 5.5,9.88071187 5.5,8.5 C5.5,7.11928813 6.61928813,6 8,6 Z M13.5,5 C13.2238576,5 13,5.22385763 13,5.5 C13,5.77614237 13.2238576,6 13.5,6 C13.7761424,6 14,5.77614237 14,5.5 C14,5.22385763 13.7761424,5 13.5,5 Z"/>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>buletooth_camera_dark</title>
|
||||
<g id="buletooth_camera_dark" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<path d="M9,3 C9.3147573,3 9.61114562,3.14819416 9.8,3.4 L10.25,4 L13,4 C14.1045695,4 15,4.8954305 15,6 L15,11 C15,12.1045695 14.1045695,13 13,13 L3,13 C1.8954305,13 1,12.1045695 1,11 L1,6 C1,4.8954305 1.8954305,4 3,4 L5.75,4 L6.2,3.4 C6.38885438,3.14819416 6.6852427,3 7,3 L9,3 Z M8,5 C6.06700338,5 4.5,6.56700338 4.5,8.5 C4.5,10.4329966 6.06700338,12 8,12 C9.93299662,12 11.5,10.4329966 11.5,8.5 C11.5,6.56700338 9.93299662,5 8,5 Z M8,6 C9.38071187,6 10.5,7.11928813 10.5,8.5 C10.5,9.88071187 9.38071187,11 8,11 C6.61928813,11 5.5,9.88071187 5.5,8.5 C5.5,7.11928813 6.61928813,6 8,6 Z M13.5,5 C13.2238576,5 13,5.22385763 13,5.5 C13,5.77614237 13.2238576,6 13.5,6 C13.7761424,6 14,5.77614237 14,5.5 C14,5.22385763 13.7761424,5 13.5,5 Z" id="形状结合" fill="#FFFFFF"></path>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 868 B After Width: | Height: | Size: 1.1 KiB |
@ -1,3 +1,7 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<path fill="#C5CFE0" fill-rule="evenodd" d="M11,2 C12.1045695,2 13,2.8954305 13,4 L13,13 C13,14.1045695 12.1045695,15 11,15 L5,15 C3.8954305,15 3,14.1045695 3,13 L3,4 C3,2.8954305 3.8954305,2 5,2 L11,2 Z M7,8 C5.34314575,8 4,9.34314575 4,11 C4,12.6568542 5.34314575,14 7,14 C8.65685425,14 10,12.6568542 10,11 C10,9.34314575 8.65685425,8 7,8 Z M7,9.5 C7.82842712,9.5 8.5,10.1715729 8.5,11 C8.5,11.8284271 7.82842712,12.5 7,12.5 C6.17157288,12.5 5.5,11.8284271 5.5,11 C5.5,10.1715729 6.17157288,9.5 7,9.5 Z M9,3 C7.8954305,3 7,3.8954305 7,5 C7,6.1045695 7.8954305,7 9,7 C10.1045695,7 11,6.1045695 11,5 C11,3.8954305 10.1045695,3 9,3 Z M9,4 C9.55228475,4 10,4.44771525 10,5 C10,5.55228475 9.55228475,6 9,6 C8.44771525,6 8,5.55228475 8,5 C8,4.44771525 8.44771525,4 9,4 Z"/>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>buletooth_clang_dark</title>
|
||||
<g id="buletooth_clang_dark" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<path d="M11,2 C12.1045695,2 13,2.8954305 13,4 L13,13 C13,14.1045695 12.1045695,15 11,15 L5,15 C3.8954305,15 3,14.1045695 3,13 L3,4 C3,2.8954305 3.8954305,2 5,2 L11,2 Z M7,8 C5.34314575,8 4,9.34314575 4,11 C4,12.6568542 5.34314575,14 7,14 C8.65685425,14 10,12.6568542 10,11 C10,9.34314575 8.65685425,8 7,8 Z M7,9.5 C7.82842712,9.5 8.5,10.1715729 8.5,11 C8.5,11.8284271 7.82842712,12.5 7,12.5 C6.17157288,12.5 5.5,11.8284271 5.5,11 C5.5,10.1715729 6.17157288,9.5 7,9.5 Z M9,3 C7.8954305,3 7,3.8954305 7,5 C7,6.1045695 7.8954305,7 9,7 C10.1045695,7 11,6.1045695 11,5 C11,3.8954305 10.1045695,3 9,3 Z M9,4 C9.55228475,4 10,4.44771525 10,5 C10,5.55228475 9.55228475,6 9,6 C8.44771525,6 8,5.55228475 8,5 C8,4.44771525 8.44771525,4 9,4 Z" id="形状结合" fill="#FFFFFF"></path>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 863 B After Width: | Height: | Size: 1.1 KiB |
@ -1,3 +1,7 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<path fill="#C5CFE0" fill-rule="evenodd" d="M13,4 L3,4 C1.8954305,4 1,4.8954305 1,6 L1,11 C1,12.1045695 1.8954305,13 3,13 L13,13 C14.1045695,13 15,12.1045695 15,11 L15,6 C15,4.8954305 14.1045695,4 13,4 Z M4,6 L2,6 L2,7 L4,7 L4,6 Z M6,6 L5,6 L5,7 L6,7 L6,6 Z M8,6 L7,6 L7,7 L8,7 L8,6 Z M10,6 L9,6 L9,7 L10,7 L10,6 Z M12,6 L11,6 L11,7 L12,7 L12,6 Z M14,6 L13,6 L13,7 L14,7 L14,6 Z M11,11 L5,11 L5,12 L11,12 L11,11 Z M14,9 L11,9 L11,10 L14,10 L14,9 Z M4,9 L2,9 L2,10 L4,10 L4,9 Z M6,9 L5,9 L5,10 L6,10 L6,9 Z M8,9 L7,9 L7,10 L8,10 L8,9 Z M10,9 L9,9 L9,10 L10,10 L10,9 Z"/>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>buletooth_keyboard_dark</title>
|
||||
<g id="buletooth_keyboard_dark" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<path d="M13,4 L3,4 C1.8954305,4 1,4.8954305 1,6 L1,11 C1,12.1045695 1.8954305,13 3,13 L13,13 C14.1045695,13 15,12.1045695 15,11 L15,6 C15,4.8954305 14.1045695,4 13,4 Z M4,6 L2,6 L2,7 L4,7 L4,6 Z M6,6 L5,6 L5,7 L6,7 L6,6 Z M8,6 L7,6 L7,7 L8,7 L8,6 Z M10,6 L9,6 L9,7 L10,7 L10,6 Z M12,6 L11,6 L11,7 L12,7 L12,6 Z M14,6 L13,6 L13,7 L14,7 L14,6 Z M11,11 L5,11 L5,12 L11,12 L11,11 Z M14,9 L11,9 L11,10 L14,10 L14,9 Z M4,9 L2,9 L2,10 L4,10 L4,9 Z M6,9 L5,9 L5,10 L6,10 L6,9 Z M8,9 L7,9 L7,10 L8,10 L8,9 Z M10,9 L9,9 L9,10 L10,10 L10,9 Z" id="形状" fill="#FFFFFF"></path>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 663 B After Width: | Height: | Size: 918 B |
@ -1,3 +1,7 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<path fill="#C5CFE0" fill-rule="evenodd" d="M8,7 C8.55228475,7 9,7.44771525 9,8 L9,9 L13,9 C14.1045695,9 15,9.8954305 15,11 L15,12 C15,13.1045695 14.1045695,14 13,14 L3,14 C1.8954305,14 0.999999999,13.1045695 0.999999999,12 L0.999999999,11 C0.999999999,9.8954305 1.8954305,9 3,9 L7,9 L7,8 C7,7.44771525 7.44771525,7 8,7 Z M3.75,10.5 C3.33578644,10.5 3,10.8357864 3,11.25 C3,11.6642136 3.33578644,12 3.75,12 C4.16421356,12 4.5,11.6642136 4.5,11.25 C4.5,10.8357864 4.16421356,10.5 3.75,10.5 Z M6.25,10.5 C5.83578644,10.5 5.5,10.8357864 5.5,11.25 C5.5,11.6642136 5.83578644,12 6.25,12 C6.66421356,12 7,11.6642136 7,11.25 C7,10.8357864 6.66421356,10.5 6.25,10.5 Z M8,4.43579477 C9.6465454,4.43579477 11.1321792,5.08947934 12.1843601,6.13825562 L11.2755628,6.9989637 C10.4560251,6.17090503 9.29167133,5.65369215 8,5.65369215 C6.70780741,5.65369215 5.54303518,6.17132256 4.72344523,6.99996635 L3.81563987,6.13825562 C4.86782077,5.08947934 6.3534546,4.43579477 8,4.43579477 Z M8,2 C10.3553542,2 12.4827521,2.92604569 13.9998287,4.41534116 L13.0920471,5.27668346 C11.8073922,4.00771041 10.0009066,3.21789738 8,3.21789738 C5.99909337,3.21789738 4.1926078,4.00771041 2.90795289,5.27668346 L2.00056858,4.41495114 C3.51761931,2.92588402 5.64485145,2 8,2 Z"/>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>buletooth_lan_dark</title>
|
||||
<g id="buletooth_lan_dark" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<path d="M8,7 C8.55228475,7 9,7.44771525 9,8 L9,9 L13,9 C14.1045695,9 15,9.8954305 15,11 L15,12 C15,13.1045695 14.1045695,14 13,14 L3,14 C1.8954305,14 0.999999999,13.1045695 0.999999999,12 L0.999999999,11 C0.999999999,9.8954305 1.8954305,9 3,9 L7,9 L7,8 C7,7.44771525 7.44771525,7 8,7 Z M3.75,10.5 C3.33578644,10.5 3,10.8357864 3,11.25 C3,11.6642136 3.33578644,12 3.75,12 C4.16421356,12 4.5,11.6642136 4.5,11.25 C4.5,10.8357864 4.16421356,10.5 3.75,10.5 Z M6.25,10.5 C5.83578644,10.5 5.5,10.8357864 5.5,11.25 C5.5,11.6642136 5.83578644,12 6.25,12 C6.66421356,12 7,11.6642136 7,11.25 C7,10.8357864 6.66421356,10.5 6.25,10.5 Z M8,4.43579477 C9.6465454,4.43579477 11.1321792,5.08947934 12.1843601,6.13825562 L11.2755628,6.9989637 C10.4560251,6.17090503 9.29167133,5.65369215 8,5.65369215 C6.70780741,5.65369215 5.54303518,6.17132256 4.72344523,6.99996635 L3.81563987,6.13825562 C4.86782077,5.08947934 6.3534546,4.43579477 8,4.43579477 Z M8,2 C10.3553542,2 12.4827521,2.92604569 13.9998287,4.41534116 L13.0920471,5.27668346 C11.8073922,4.00771041 10.0009066,3.21789738 8,3.21789738 C5.99909337,3.21789738 4.1926078,4.00771041 2.90795289,5.27668346 L2.00056858,4.41495114 C3.51761931,2.92588402 5.64485145,2 8,2 Z" id="形状结合" fill="#FFFFFF"></path>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.6 KiB |
@ -1,3 +1,7 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<path fill="#C5CFE0" fill-rule="evenodd" d="M13,3 C14.1045695,3 15,3.8954305 15,5 L15,13 L15.5,13 C15.7761424,13 16,13.2238576 16,13.5 C16,13.7761424 15.7761424,14 15.5,14 L1.5,14 C1.22385763,14 1,13.7761424 1,13.5 C1,13.2238576 1.22385763,13 1.5,13 L2,13 L2,5 C2,3.8954305 2.8954305,3 4,3 L13,3 Z M13,4 L4,4 C3.44771525,4 3,4.44771525 3,5 L3,5 L3,11 C3,11.5522847 3.44771525,12 4,12 L4,12 L13,12 C13.5522847,12 14,11.5522847 14,11 L14,11 L14,5 C14,4.44771525 13.5522847,4 13,4 L13,4 Z"/>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>buletooth_laptop_dark</title>
|
||||
<g id="buletooth_laptop_dark" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<path d="M13,3 C14.1045695,3 15,3.8954305 15,5 L15,13 L15.5,13 C15.7761424,13 16,13.2238576 16,13.5 C16,13.7761424 15.7761424,14 15.5,14 L1.5,14 C1.22385763,14 1,13.7761424 1,13.5 C1,13.2238576 1.22385763,13 1.5,13 L2,13 L2,5 C2,3.8954305 2.8954305,3 4,3 L13,3 Z M13,4 L4,4 C3.44771525,4 3,4.44771525 3,5 L3,5 L3,11 C3,11.5522847 3.44771525,12 4,12 L4,12 L13,12 C13.5522847,12 14,11.5522847 14,11 L14,11 L14,5 C14,4.44771525 13.5522847,4 13,4 L13,4 Z" id="形状结合" fill="#FFFFFF"></path>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 582 B After Width: | Height: | Size: 839 B |
@ -1,3 +1,7 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<path fill="#C5CFE0" fill-rule="evenodd" d="M9.97129776,7.3924645 L9.43182891,14.6703097 C9.37629241,15.4200524 8.75179683,16 8,16 C7.24820317,16 6.62370759,15.4200524 6.56817109,14.6703097 L6.02870224,7.3924645 C6.59011897,7.7758262 7.26888019,8 8,8 C8.73111981,8 9.40988103,7.7758262 9.97129776,7.3924645 Z M7.5,9 C7.25454011,9 7.05039163,9.17687516 7.00805567,9.41012437 L7,9.5 L7,10.5 C7,10.7761424 7.22385763,11 7.5,11 C7.74545989,11 7.94960837,10.8231248 7.99194433,10.5898756 L8,10.5 L8,9.5 C8,9.22385763 7.77614237,9 7.5,9 Z M8,1 C9.65685425,1 11,2.34314575 11,4 C11,5.65685425 9.65685425,7 8,7 C6.34314575,7 5,5.65685425 5,4 C5,2.34314575 6.34314575,1 8,1 Z" transform="rotate(45 8 8.5)"/>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>buletooth_microphone_dark</title>
|
||||
<g id="buletooth_microphone_dark" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<path d="M9.97129776,7.3924645 L9.43182891,14.6703097 C9.37629241,15.4200524 8.75179683,16 8,16 C7.24820317,16 6.62370759,15.4200524 6.56817109,14.6703097 L6.02870224,7.3924645 C6.59011897,7.7758262 7.26888019,8 8,8 C8.73111981,8 9.40988103,7.7758262 9.97129776,7.3924645 Z M7.5,9 C7.25454011,9 7.05039163,9.17687516 7.00805567,9.41012437 L7,9.5 L7,10.5 C7,10.7761424 7.22385763,11 7.5,11 C7.74545989,11 7.94960837,10.8231248 7.99194433,10.5898756 L8,10.5 L8,9.5 C8,9.22385763 7.77614237,9 7.5,9 Z M8,1 C9.65685425,1 11,2.34314575 11,4 C11,5.65685425 9.65685425,7 8,7 C6.34314575,7 5,5.65685425 5,4 C5,2.34314575 6.34314575,1 8,1 Z" id="形状结合" fill="#FFFFFF" transform="translate(8.000000, 8.500000) rotate(45.000000) translate(-8.000000, -8.500000) "></path>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 792 B After Width: | Height: | Size: 1.1 KiB |
@ -1,3 +1,7 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<path fill="#C5CFE0" fill-rule="evenodd" d="M13,8.53172798 L13,9.53172798 C13,12.2931517 10.7614237,14.531728 8,14.531728 C5.23857625,14.531728 3,12.2931517 3,9.53172798 L3,8.53172798 L13,8.53172798 Z M8,1.53172798 C10.7614237,1.53172798 13,3.77030423 13,6.53172798 L13,7.53172798 L3,7.53172798 L3,6.53172798 C3,3.77030423 5.23857625,1.53172798 8,1.53172798 Z M8,3.53172798 C7.72385763,3.53172798 7.5,3.7555856 7.5,4.03172798 L7.5,4.03172798 L7.5,6.03172798 C7.5,6.30787035 7.72385763,6.53172798 8,6.53172798 C8.27614237,6.53172798 8.5,6.30787035 8.5,6.03172798 L8.5,6.03172798 L8.5,4.03172798 C8.5,3.7555856 8.27614237,3.53172798 8,3.53172798 Z" transform="rotate(45 8 8.032)"/>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>buletooth_mouse_dark</title>
|
||||
<g id="buletooth_mouse_dark" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<path d="M13,8.53172798 L13,9.53172798 C13,12.2931517 10.7614237,14.531728 8,14.531728 C5.23857625,14.531728 3,12.2931517 3,9.53172798 L3,8.53172798 L13,8.53172798 Z M8,1.53172798 C10.7614237,1.53172798 13,3.77030423 13,6.53172798 L13,7.53172798 L3,7.53172798 L3,6.53172798 C3,3.77030423 5.23857625,1.53172798 8,1.53172798 Z M8,3.53172798 C7.72385763,3.53172798 7.5,3.7555856 7.5,4.03172798 L7.5,4.03172798 L7.5,6.03172798 C7.5,6.30787035 7.72385763,6.53172798 8,6.53172798 C8.27614237,6.53172798 8.5,6.30787035 8.5,6.03172798 L8.5,6.03172798 L8.5,4.03172798 C8.5,3.7555856 8.27614237,3.53172798 8,3.53172798 Z" id="形状结合" fill="#FFFFFF" transform="translate(8.000000, 8.031728) rotate(45.000000) translate(-8.000000, -8.031728) "></path>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 773 B After Width: | Height: | Size: 1.1 KiB |
@ -1,3 +1,7 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<path fill="#C5CFE0" fill-rule="evenodd" d="M11,2 C12.6568542,2 14,3.34314575 14,5 L14,11 C14,12.6568542 12.6568542,14 11,14 L5,14 C3.34314575,14 2,12.6568542 2,11 L2,5 C2,3.34314575 3.34314575,2 5,2 L11,2 Z M8.21794839,3.04960864 C7.89636093,2.89141423 7.5,3.12236274 7.5,3.5 L7.5,3.5 L7.5,7.138 L4.74806947,5.56587843 L4.66603884,5.52828191 C4.44251729,5.4493158 4.18766064,5.53881167 4.06587843,5.75193053 L4.06587843,5.75193053 L4.02828191,5.83396116 C3.9493158,6.05748271 4.03881167,6.31233936 4.25193053,6.43412157 L4.25193053,6.43412157 L6.991,8 L4.25193053,9.56587843 L4.17789336,9.61746351 C3.99638085,9.76994543 3.94409622,10.0349506 4.06587843,10.2480695 L4.06587843,10.2480695 L4.11746351,10.3221066 C4.26994543,10.5036191 4.5349506,10.5559038 4.74806947,10.4341216 L4.74806947,10.4341216 L7.5,8.861 L7.5,12.5 L7.50682155,12.5844328 C7.56501237,12.9380679 7.98332302,13.1263639 8.2906191,12.9068667 L8.2906191,12.9068667 L11.7906191,10.4068667 L11.8581667,10.3492475 C12.0815493,10.1220755 12.0383123,9.73173147 11.7480695,9.56587843 L11.7480695,9.56587843 L9.008,8 L11.7480695,6.43412157 L11.8210878,6.38361429 C12.0662583,6.18014854 12.06264,5.78743392 11.7906191,5.59313326 L11.7906191,5.59313326 L8.2906191,3.09313326 Z M8.5,8.862 L10.574,10.047 L8.5,11.528 L8.5,8.862 Z M8.5,4.471 L10.574,5.952 L8.5,7.137 L8.5,4.471 Z"/>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>buletooth_other_dark</title>
|
||||
<g id="buletooth_other_dark" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<path d="M11,2 C12.6568542,2 14,3.34314575 14,5 L14,11 C14,12.6568542 12.6568542,14 11,14 L5,14 C3.34314575,14 2,12.6568542 2,11 L2,5 C2,3.34314575 3.34314575,2 5,2 L11,2 Z M7.71794839,3.04960864 C7.39636093,2.89141423 7,3.12236274 7,3.5 L7,3.5 L7,7.138 L4.24806947,5.56587843 L4.16603884,5.52828191 C3.94251729,5.4493158 3.68766064,5.53881167 3.56587843,5.75193053 L3.56587843,5.75193053 L3.52828191,5.83396116 C3.4493158,6.05748271 3.53881167,6.31233936 3.75193053,6.43412157 L3.75193053,6.43412157 L6.491,8 L3.75193053,9.56587843 L3.67789336,9.61746351 C3.49638085,9.76994543 3.44409622,10.0349506 3.56587843,10.2480695 L3.56587843,10.2480695 L3.61746351,10.3221066 C3.76994543,10.5036191 4.0349506,10.5559038 4.24806947,10.4341216 L4.24806947,10.4341216 L7,8.861 L7,12.5 L7.00682155,12.5844328 C7.06501237,12.9380679 7.48332302,13.1263639 7.7906191,12.9068667 L7.7906191,12.9068667 L11.2906191,10.4068667 L11.3581667,10.3492475 C11.5815493,10.1220755 11.5383123,9.73173147 11.2480695,9.56587843 L11.2480695,9.56587843 L8.508,8 L11.2480695,6.43412157 L11.3210878,6.38361429 C11.5662583,6.18014854 11.56264,5.78743392 11.2906191,5.59313326 L11.2906191,5.59313326 L7.7906191,3.09313326 Z M8,8.862 L10.074,10.047 L8,11.528 L8,8.862 Z M8,4.471 L10.074,5.952 L8,7.137 L8,4.471 Z" id="形状结合" fill="#FFFFFF"></path>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.6 KiB |
@ -1,3 +1,7 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<path fill="#C5CFE0" fill-rule="evenodd" d="M13,3 C14.1045695,3 15,3.8954305 15,5 L15,11 C15,12.1045695 14.1045695,13 13,13 L3,13 C1.8954305,13 1,12.1045695 1,11 L1,5 C1,3.8954305 1.8954305,3 3,3 L13,3 Z M12,4 L3,4 C2.44771525,4 2,4.44771525 2,5 L2,5 L2,11 C2,11.5522847 2.44771525,12 3,12 L3,12 L12,12 C12.5522847,12 13,11.5522847 13,11 L13,11 L13,5 C13,4.44771525 12.5522847,4 12,4 L12,4 Z M14,7.5 C13.7238576,7.5 13.5,7.72385763 13.5,8 C13.5,8.27614237 13.7238576,8.5 14,8.5 C14.2761424,8.5 14.5,8.27614237 14.5,8 C14.5,7.72385763 14.2761424,7.5 14,7.5 Z"/>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>buletooth_pad_dark</title>
|
||||
<g id="buletooth_pad_dark" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<path d="M13,3 C14.1045695,3 15,3.8954305 15,5 L15,11 C15,12.1045695 14.1045695,13 13,13 L3,13 C1.8954305,13 1,12.1045695 1,11 L1,5 C1,3.8954305 1.8954305,3 3,3 L13,3 Z M12,4 L3,4 C2.44771525,4 2,4.44771525 2,5 L2,5 L2,11 C2,11.5522847 2.44771525,12 3,12 L3,12 L12,12 C12.5522847,12 13,11.5522847 13,11 L13,11 L13,5 C13,4.44771525 12.5522847,4 12,4 L12,4 Z M14,7.5 C13.7238576,7.5 13.5,7.72385763 13.5,8 C13.5,8.27614237 13.7238576,8.5 14,8.5 C14.2761424,8.5 14.5,8.27614237 14.5,8 C14.5,7.72385763 14.2761424,7.5 14,7.5 Z" id="形状结合" fill="#FFFFFF"></path>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 654 B After Width: | Height: | Size: 905 B |
@ -1,3 +1,9 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<path fill="#C5CFE0" fill-rule="evenodd" d="M2.5,11 C2.22385763,11 2,10.7761424 2,10.5 C2,10.2238576 2.22385763,10 2.5,10 L6,10 L6,9 L1,9 C0.44771525,9 6.76353751e-17,8.55228475 0,8 L13,8 C13,8.55228475 12.5522847,9 12,9 L7,9 L7,10 L10.5,10 C10.7761424,10 11,10.2238576 11,10.5 C11,10.7761424 10.7761424,11 10.5,11 L2.5,11 Z M11,0 C12.1045695,-2.02906125e-16 13,0.8954305 13,2 L13,7 L0,7 L0,2 C-1.3527075e-16,0.8954305 0.8954305,2.02906125e-16 2,0 L11,0 Z" transform="translate(2 3)"/>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>buletooth_pc_dark</title>
|
||||
<g id="buletooth_pc_dark" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="编组-4" transform="translate(2.000000, 3.000000)" fill="#FFFFFF">
|
||||
<path d="M2.5,11 C2.22385763,11 2,10.7761424 2,10.5 C2,10.2238576 2.22385763,10 2.5,10 L6,10 L6,9 L1,9 C0.44771525,9 6.76353751e-17,8.55228475 0,8 L13,8 C13,8.55228475 12.5522847,9 12,9 L7,9 L7,10 L10.5,10 C10.7761424,10 11,10.2238576 11,10.5 C11,10.7761424 10.7761424,11 10.5,11 L2.5,11 Z M11,0 C12.1045695,-2.02906125e-16 13,0.8954305 13,2 L13,7 L0,7 L0,2 C-1.3527075e-16,0.8954305 0.8954305,2.02906125e-16 2,0 L11,0 Z" id="形状结合"></path>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 579 B After Width: | Height: | Size: 886 B |
@ -1,3 +1,7 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<path fill="#C5CFE0" fill-rule="evenodd" d="M5.40009062,12.9559895 L2.79944555,13.4807163 C2.66410182,13.5080243 2.53224653,13.4204441 2.5049385,13.2851003 C2.49835429,13.2524677 2.49835383,13.2188487 2.50493716,13.1862159 L3.02967395,10.5851562 L3.02967395,10.5851562 L9.70545583,3.90977002 C9.90070318,3.71449308 10.2172857,3.71450246 10.412542,3.9097704 C10.4125489,3.90977726 10.4125557,3.90978412 10.412542,3.90981157 L12.0763307,5.57389266 C12.2715761,5.76917159 12.2715482,6.08575408 12.0762689,6.28099907 C12.0762688,6.28099919 12.0762687,6.28099931 12.0762682,6.28099907 L5.40009062,12.9559895 L5.40009062,12.9559895 Z M13.8391542,3.8098192 L12.1751352,2.14638503 C11.9798394,1.95115657 11.6632569,1.95121221 11.4680291,2.14650867 C11.4680289,2.14650888 11.4680287,2.14650909 11.4680291,2.14650993 L11.001677,2.61302763 C10.8066232,2.80840055 10.8066235,3.12488673 11.0016776,3.32025929 L12.6655284,4.98469494 C12.860506,5.18024154 13.1770885,5.18029717 13.372385,4.98506934 C13.3724684,4.98498593 13.3725518,4.98490248 13.3723849,4.98456895 L13.8394045,4.51705195 C14.0343874,4.32160917 14.0342754,4.00512389 13.8391542,3.8098192 Z"/>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>buletooth_pen_dark</title>
|
||||
<g id="buletooth_pen_dark" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<path d="M5.40009062,12.9559895 L2.79944555,13.4807163 C2.66410182,13.5080243 2.53224653,13.4204441 2.5049385,13.2851003 C2.49835429,13.2524677 2.49835383,13.2188487 2.50493716,13.1862159 L3.02967395,10.5851562 L3.02967395,10.5851562 L9.70545583,3.90977002 C9.90070318,3.71449308 10.2172857,3.71450246 10.412542,3.9097704 C10.4125489,3.90977726 10.4125557,3.90978412 10.412542,3.90981157 L12.0763307,5.57389266 C12.2715761,5.76917159 12.2715482,6.08575408 12.0762689,6.28099907 C12.0762688,6.28099919 12.0762687,6.28099931 12.0762682,6.28099907 L5.40009062,12.9559895 L5.40009062,12.9559895 Z M13.8391542,3.8098192 L12.1751352,2.14638503 C11.9798394,1.95115657 11.6632569,1.95121221 11.4680291,2.14650867 C11.4680289,2.14650888 11.4680287,2.14650909 11.4680291,2.14650993 L11.001677,2.61302763 C10.8066232,2.80840055 10.8066235,3.12488673 11.0016776,3.32025929 L12.6655284,4.98469494 C12.860506,5.18024154 13.1770885,5.18029717 13.372385,4.98506934 C13.3724684,4.98498593 13.3725518,4.98490248 13.3723849,4.98456895 L13.8394045,4.51705195 C14.0343874,4.32160917 14.0342754,4.00512389 13.8391542,3.8098192 Z" id="形状" fill="#FFFFFF"></path>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.4 KiB |
@ -1,3 +1,7 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<path fill="#C5CFE0" fill-rule="evenodd" d="M5,8 C6.1045695,8 7,8.8954305 7,10 L7,12 C7,13.0543618 6.18412221,13.9181651 5.14926234,13.9945143 L5,14 L5,8 Z M11,8 L11,14 L10.8507377,13.9945143 C9.81587779,13.9181651 9,13.0543618 9,12 L9,12 L9,10 C9,8.8954305 9.8954305,8 11,8 L11,8 Z M4,9 L4,13 C3.44771525,13 3,12.5522847 3,12 L3,10 C3,9.48716416 3.38604019,9.06449284 3.88337887,9.00672773 L4,9 Z M12,9 L12.1166211,9.00672773 C12.6139598,9.06449284 13,9.48716416 13,10 L13,10 L13,12 C13,12.5522847 12.5522847,13 12,13 L12,13 L12,9 Z M8,1.5 C11.7854517,1.5 14.8690987,4.50478338 14.995941,8.25935025 L15,8.5 L15,11 C15,11.2761424 14.7761424,11.5 14.5,11.5 C14.2545401,11.5 14.0503916,11.3231248 14.0080557,11.0898756 L14,11 L14,8.5 C14,5.1862915 11.3137085,2.5 8,2.5 C4.76160306,2.5 2.12242824,5.06557489 2.00413847,8.27506174 L2,8.5 L2,11 C2,11.2761424 1.77614237,11.5 1.5,11.5 C1.25454011,11.5 1.05039163,11.3231248 1.00805567,11.0898756 L1,11 L1,8.5 C1,4.63400675 4.13400675,1.5 8,1.5 Z"/>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>buletooth_pheadset_dark</title>
|
||||
<g id="buletooth_pheadset_dark" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<path d="M5,8 C6.1045695,8 7,8.8954305 7,10 L7,12 C7,13.0543618 6.18412221,13.9181651 5.14926234,13.9945143 L5,14 L5,8 Z M11,8 L11,14 L10.8507377,13.9945143 C9.81587779,13.9181651 9,13.0543618 9,12 L9,12 L9,10 C9,8.8954305 9.8954305,8 11,8 L11,8 Z M4,9 L4,13 C3.44771525,13 3,12.5522847 3,12 L3,10 C3,9.48716416 3.38604019,9.06449284 3.88337887,9.00672773 L4,9 Z M12,9 L12.1166211,9.00672773 C12.6139598,9.06449284 13,9.48716416 13,10 L13,10 L13,12 C13,12.5522847 12.5522847,13 12,13 L12,13 L12,9 Z M8,1.5 C11.7854517,1.5 14.8690987,4.50478338 14.995941,8.25935025 L15,8.5 L15,11 C15,11.2761424 14.7761424,11.5 14.5,11.5 C14.2545401,11.5 14.0503916,11.3231248 14.0080557,11.0898756 L14,11 L14,8.5 C14,5.1862915 11.3137085,2.5 8,2.5 C4.76160306,2.5 2.12242824,5.06557489 2.00413847,8.27506174 L2,8.5 L2,11 C2,11.2761424 1.77614237,11.5 1.5,11.5 C1.25454011,11.5 1.05039163,11.3231248 1.00805567,11.0898756 L1,11 L1,8.5 C1,4.63400675 4.13400675,1.5 8,1.5 Z" id="形状结合" fill="#FFFFFF"></path>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.3 KiB |
@ -1,3 +1,7 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<path fill="#C5CFE0" fill-rule="evenodd" d="M11,1 C12.1045695,1 13,1.8954305 13,3 L13,13 C13,14.1045695 12.1045695,15 11,15 L6,15 C4.8954305,15 4,14.1045695 4,13 L4,3 C4,1.8954305 4.8954305,1 6,1 L11,1 Z M11,2 L6,2 C5.44771525,2 5,2.44771525 5,3 L5,3 L5,13 C5,13.5522847 5.44771525,14 6,14 L6,14 L11,14 C11.5522847,14 12,13.5522847 12,13 L12,13 L12,3 C12,2.44771525 11.5522847,2 11,2 L11,2 Z M9.5,3 C9.77614237,3 10,3.22385763 10,3.5 C10,3.77614237 9.77614237,4 9.5,4 L7.5,4 C7.22385763,4 7,3.77614237 7,3.5 C7,3.22385763 7.22385763,3 7.5,3 L9.5,3 Z"/>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>buletooth_phone_dark</title>
|
||||
<g id="buletooth_phone_dark" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<path d="M11,1 C12.1045695,1 13,1.8954305 13,3 L13,13 C13,14.1045695 12.1045695,15 11,15 L6,15 C4.8954305,15 4,14.1045695 4,13 L4,3 C4,1.8954305 4.8954305,1 6,1 L11,1 Z M11,2 L6,2 C5.44771525,2 5,2.44771525 5,3 L5,3 L5,13 C5,13.5522847 5.44771525,14 6,14 L6,14 L11,14 C11.5522847,14 12,13.5522847 12,13 L12,13 L12,3 C12,2.44771525 11.5522847,2 11,2 L11,2 Z M9.5,3 C9.77614237,3 10,3.22385763 10,3.5 C10,3.77614237 9.77614237,4 9.5,4 L7.5,4 C7.22385763,4 7,3.77614237 7,3.5 C7,3.22385763 7.22385763,3 7.5,3 L9.5,3 Z" id="形状结合" fill="#FFFFFF"></path>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 646 B After Width: | Height: | Size: 901 B |
@ -1,3 +1,7 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<path fill="#C5CFE0" fill-rule="evenodd" d="M10.5,10 C10.7761424,10 11,10.2238576 11,10.5 L11,13.5 C11,13.7761424 10.7761424,14 10.5,14 L5.5,14 C5.22385763,14 5,13.7761424 5,13.5 L5,10.5 C5,10.2238576 5.22385763,10 5.5,10 L10.5,10 Z M13,5 C14.1045695,5 15,5.8954305 15,7 L15,11 C15,12.1045695 14.1045695,13 13,13 L12,13 L12,10.5 C12,9.72030388 11.4051119,9.07955132 10.64446,9.00686658 L10.5,9 L5.5,9 C4.72030388,9 4.07955132,9.59488808 4.00686658,10.35554 L4,10.5 L4,13 L3,13 C1.8954305,13 1,12.1045695 1,11 L1,7 C1,5.8954305 1.8954305,5 3,5 L13,5 Z M8.5,12 L6.5,12 C6.22385763,12 6,12.2238576 6,12.5 C6,12.7454599 6.17687516,12.9496084 6.41012437,12.9919443 L6.5,13 L8.5,13 C8.77614237,13 9,12.7761424 9,12.5 C9,12.2238576 8.77614237,12 8.5,12 Z M10.5,2 C10.7761424,2 11,2.22385763 11,2.5 L11,4 L5,4 L5,2.5 C5,2.22385763 5.22385763,2 5.5,2 L10.5,2 Z"/>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>buletooth_print_dark</title>
|
||||
<g id="buletooth_print_dark" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<path d="M10.5,10 C10.7761424,10 11,10.2238576 11,10.5 L11,13.5 C11,13.7761424 10.7761424,14 10.5,14 L5.5,14 C5.22385763,14 5,13.7761424 5,13.5 L5,10.5 C5,10.2238576 5.22385763,10 5.5,10 L10.5,10 Z M13,5 C14.1045695,5 15,5.8954305 15,7 L15,11 C15,12.1045695 14.1045695,13 13,13 L12,13 L12,10.5 C12,9.72030388 11.4051119,9.07955132 10.64446,9.00686658 L10.5,9 L5.5,9 C4.72030388,9 4.07955132,9.59488808 4.00686658,10.35554 L4,10.5 L4,13 L3,13 C1.8954305,13 1,12.1045695 1,11 L1,7 C1,5.8954305 1.8954305,5 3,5 L13,5 Z M8.5,12 L6.5,12 C6.22385763,12 6,12.2238576 6,12.5 C6,12.7454599 6.17687516,12.9496084 6.41012437,12.9919443 L6.5,13 L8.5,13 C8.77614237,13 9,12.7761424 9,12.5 C9,12.2238576 8.77614237,12 8.5,12 Z M10.5,2 C10.7761424,2 11,2.22385763 11,2.5 L11,4 L5,4 L5,2.5 C5,2.22385763 5.22385763,2 5.5,2 L10.5,2 Z" id="形状结合" fill="#FFFFFF"></path>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 948 B After Width: | Height: | Size: 1.2 KiB |
@ -1,3 +1,7 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<path fill="#C5CFE0" fill-rule="evenodd" d="M13.5,10 C13.7761424,10 14,10.2238576 14,10.5 L14,12 C14,13.1045695 13.1045695,14 12,14 L10.5,14 C10.2238576,14 10,13.7761424 10,13.5 C10,13.2238576 10.2238576,13 10.5,13 L12,13 C12.5522847,13 13,12.5522847 13,12 L13,10.5 C13,10.2238576 13.2238576,10 13.5,10 Z M2.5,10 C2.77614237,10 3,10.2238576 3,10.5 L3,10.5 L3,12 C3,12.5522847 3.44771525,13 4,13 L4,13 L5.5,13 C5.77614237,13 6,13.2238576 6,13.5 C6,13.7761424 5.77614237,14 5.5,14 L5.5,14 L4,14 C2.8954305,14 2,13.1045695 2,12 L2,12 L2,10.5 C2,10.2238576 2.22385763,10 2.5,10 Z M12,10 L12,11 C12,11.5522847 11.5522847,12 11,12 L5,12 C4.44771525,12 4,11.5522847 4,11 L4,10 L12,10 Z M13.5,8 C13.7761424,8 14,8.22385763 14,8.5 C14,8.77614237 13.7761424,9 13.5,9 L2.5,9 C2.22385763,9 2,8.77614237 2,8.5 C2,8.22385763 2.22385763,8 2.5,8 L13.5,8 Z M11,4 C11.5522847,4 12,4.44771525 12,5 L12,7 L4,7 L4,5 C4,4.44771525 4.44771525,4 5,4 L11,4 Z M5.5,2 C5.77614237,2 6,2.22385763 6,2.5 C6,2.77614237 5.77614237,3 5.5,3 L4,3 C3.44771525,3 3,3.44771525 3,4 L3,5.5 C3,5.77614237 2.77614237,6 2.5,6 C2.22385763,6 2,5.77614237 2,5.5 L2,4 C2,2.8954305 2.8954305,2 4,2 L5.5,2 Z M12,2 C13.1045695,2 14,2.8954305 14,4 L14,4 L14,5.5 C14,5.77614237 13.7761424,6 13.5,6 C13.2238576,6 13,5.77614237 13,5.5 L13,5.5 L13,4 C13,3.44771525 12.5522847,3 12,3 L12,3 L10.5,3 C10.2238576,3 10,2.77614237 10,2.5 C10,2.22385763 10.2238576,2 10.5,2 L10.5,2 Z"/>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>buletooth_scaner_dark</title>
|
||||
<g id="buletooth_scaner_dark" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<path d="M13.5,10 C13.7761424,10 14,10.2238576 14,10.5 L14,12 C14,13.1045695 13.1045695,14 12,14 L10.5,14 C10.2238576,14 10,13.7761424 10,13.5 C10,13.2238576 10.2238576,13 10.5,13 L12,13 C12.5522847,13 13,12.5522847 13,12 L13,10.5 C13,10.2238576 13.2238576,10 13.5,10 Z M2.5,10 C2.77614237,10 3,10.2238576 3,10.5 L3,10.5 L3,12 C3,12.5522847 3.44771525,13 4,13 L4,13 L5.5,13 C5.77614237,13 6,13.2238576 6,13.5 C6,13.7761424 5.77614237,14 5.5,14 L5.5,14 L4,14 C2.8954305,14 2,13.1045695 2,12 L2,12 L2,10.5 C2,10.2238576 2.22385763,10 2.5,10 Z M12,10 L12,11 C12,11.5522847 11.5522847,12 11,12 L5,12 C4.44771525,12 4,11.5522847 4,11 L4,10 L12,10 Z M13.5,8 C13.7761424,8 14,8.22385763 14,8.5 C14,8.77614237 13.7761424,9 13.5,9 L2.5,9 C2.22385763,9 2,8.77614237 2,8.5 C2,8.22385763 2.22385763,8 2.5,8 L13.5,8 Z M11,4 C11.5522847,4 12,4.44771525 12,5 L12,7 L4,7 L4,5 C4,4.44771525 4.44771525,4 5,4 L11,4 Z M5.5,2 C5.77614237,2 6,2.22385763 6,2.5 C6,2.77614237 5.77614237,3 5.5,3 L4,3 C3.44771525,3 3,3.44771525 3,4 L3,5.5 C3,5.77614237 2.77614237,6 2.5,6 C2.22385763,6 2,5.77614237 2,5.5 L2,4 C2,2.8954305 2.8954305,2 4,2 L5.5,2 Z M12,2 C13.1045695,2 14,2.8954305 14,4 L14,4 L14,5.5 C14,5.77614237 13.7761424,6 13.5,6 C13.2238576,6 13,5.77614237 13,5.5 L13,5.5 L13,4 C13,3.44771525 12.5522847,3 12,3 L12,3 L10.5,3 C10.2238576,3 10,2.77614237 10,2.5 C10,2.22385763 10.2238576,2 10.5,2 L10.5,2 Z" id="形状结合" fill="#FFFFFF"></path>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.7 KiB |
@ -1,3 +1,7 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<path fill="#C5CFE0" fill-rule="evenodd" d="M15,8 L15,11 C15,12.1045695 14.1045695,13 13,13 L4,13 C2.8954305,13 2,12.1045695 2,11 L2,8 L15,8 Z M2,7 L2,5 C2,3.8954305 2.8954305,3 4,3 L8,3 L8,7 L2,7 Z M9,3 L13,3 C14.1045695,3 15,3.8954305 15,5 L15,7 L9,7 L9,3 Z"/>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>buletooth_touchpad_dark</title>
|
||||
<g id="buletooth_touchpad_dark" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<path d="M15,8 L15,11 C15,12.1045695 14.1045695,13 13,13 L4,13 C2.8954305,13 2,12.1045695 2,11 L2,8 L15,8 Z M2,7 L2,5 C2,3.8954305 2.8954305,3 4,3 L8,3 L8,7 L2,7 Z M9,3 L13,3 C14.1045695,3 15,3.8954305 15,5 L15,7 L9,7 L9,3 Z" id="Combined-Shape" fill="#FFFFFF"></path>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 356 B After Width: | Height: | Size: 619 B |
@ -1,6 +1,8 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path fill="#C5CFE0" d="M12,4 C13.6568542,4 15,5.34314575 15,7 L15,11 C15,12.6568542 13.6568542,14 12,14 L5,14 C3.34314575,14 2,12.6568542 2,11 L2,7 C2,5.34314575 3.34314575,4 5,4 L12,4 Z M12,5 L5,5 C3.9456382,5 3.08183488,5.81587779 3.00548574,6.85073766 L3,7 L3,11 C3,12.0543618 3.81587779,12.9181651 4.85073766,12.9945143 L5,13 L12,13 C13.0543618,13 13.9181651,12.1841222 13.9945143,11.1492623 L14,11 L14,7 C14,5.8954305 13.1045695,5 12,5 Z M12,6 C12.5522847,6 13,6.44771525 13,7 L13,11 C13,11.5522847 12.5522847,12 12,12 L5,12 C4.44771525,12 4,11.5522847 4,11 L4,7 C4,6.44771525 4.44771525,6 5,6 L12,6 Z M7.47058824,7 L5,7 L5,7.8 L5.82352941,7.8 L5.82352941,11 L6.64705882,11 L6.64705882,7.8 L7.47058824,7.8 L7.47058824,7 Z M9.14917766,7 L8.2726478,7 L9.66165358,11 L10.6081938,11 L12,7 L11.1234701,7 L10.3477552,9.38030096 C10.2282709,9.7998176 10.1582605,10.0934793 10.1377241,10.2612859 C10.1265224,10.1883265 10.0980516,10.0583675 10.0523115,9.87140903 C10.021818,9.74677003 9.99194696,9.63246694 9.96269818,9.52849977 L9.91929175,9.38030096 L9.14917766,7 Z"/>
|
||||
<polyline stroke="#C5CFE0" stroke-linecap="round" stroke-linejoin="bevel" points="7 1 7 4 10 4" transform="rotate(-45 8.5 2.5)"/>
|
||||
</g>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>buletooth_tv_dark</title>
|
||||
<g id="buletooth_tv_dark" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<path d="M12,4 C13.6568542,4 15,5.34314575 15,7 L15,11 C15,12.6568542 13.6568542,14 12,14 L5,14 C3.34314575,14 2,12.6568542 2,11 L2,7 C2,5.34314575 3.34314575,4 5,4 L12,4 Z M12,5 L5,5 C3.9456382,5 3.08183488,5.81587779 3.00548574,6.85073766 L3,7 L3,11 C3,12.0543618 3.81587779,12.9181651 4.85073766,12.9945143 L5,13 L12,13 C13.0543618,13 13.9181651,12.1841222 13.9945143,11.1492623 L14,11 L14,7 C14,5.8954305 13.1045695,5 12,5 Z M12,6 C12.5522847,6 13,6.44771525 13,7 L13,11 C13,11.5522847 12.5522847,12 12,12 L5,12 C4.44771525,12 4,11.5522847 4,11 L4,7 C4,6.44771525 4.44771525,6 5,6 L12,6 Z M7.47058824,7 L5,7 L5,7.8 L5.82352941,7.8 L5.82352941,11 L6.64705882,11 L6.64705882,7.8 L7.47058824,7.8 L7.47058824,7 Z M9.14917766,7 L8.2726478,7 L9.66165358,11 L10.6081938,11 L12,7 L11.1234701,7 L10.3477552,9.38030096 C10.2282709,9.7998176 10.1582605,10.0934793 10.1377241,10.2612859 C10.1265224,10.1883265 10.0980516,10.0583675 10.0523115,9.87140903 C10.021818,9.74677003 9.99194696,9.63246694 9.96269818,9.52849977 L9.91929175,9.38030096 L9.14917766,7 Z" id="形状结合" fill="#FFFFFF"></path>
|
||||
<polyline id="路径-5" stroke="#FFFFFF" stroke-linecap="round" stroke-linejoin="bevel" transform="translate(8.500000, 2.500000) rotate(-45.000000) translate(-8.500000, -2.500000) " points="7 1 7 4 10 4"></polyline>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.6 KiB |
@ -1,3 +1,7 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<path fill="#C5CFE0" fill-rule="evenodd" d="M9,4 C10.1045695,4 11,4.8954305 11,6 L11,11 C11,12.1045695 10.1045695,13 9,13 L3,13 C1.8954305,13 1,12.1045695 1,11 L1,6 C1,4.8954305 1.8954305,4 3,4 L9,4 Z M14.8466082,6.01915086 C14.9459035,6.14326999 15,6.29748735 15,6.45643739 L15,11.5435626 C15,11.9301619 14.6865993,12.2435626 14.3,12.2435626 C14.14105,12.2435626 13.9868326,12.1894661 13.8627135,12.0901708 L12,10.6 L12,7.4 L13.8627135,5.90982923 C14.1645968,5.66832254 14.6051015,5.71726751 14.8466082,6.01915086 Z M2.75,5 C2.33578644,5 2,5.33578644 2,5.75 C2,6.16421356 2.33578644,6.5 2.75,6.5 C3.16421356,6.5 3.5,6.16421356 3.5,5.75 C3.5,5.33578644 3.16421356,5 2.75,5 Z"/>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>buletooth_vidicon_dark</title>
|
||||
<g id="buletooth_vidicon_dark" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<path d="M9,4 C10.1045695,4 11,4.8954305 11,6 L11,11 C11,12.1045695 10.1045695,13 9,13 L3,13 C1.8954305,13 1,12.1045695 1,11 L1,6 C1,4.8954305 1.8954305,4 3,4 L9,4 Z M14.8466082,6.01915086 C14.9459035,6.14326999 15,6.29748735 15,6.45643739 L15,11.5435626 C15,11.9301619 14.6865993,12.2435626 14.3,12.2435626 C14.14105,12.2435626 13.9868326,12.1894661 13.8627135,12.0901708 L12,10.6 L12,7.4 L13.8627135,5.90982923 C14.1645968,5.66832254 14.6051015,5.71726751 14.8466082,6.01915086 Z M2.75,5 C2.33578644,5 2,5.33578644 2,5.75 C2,6.16421356 2.33578644,6.5 2.75,6.5 C3.16421356,6.5 3.5,6.16421356 3.5,5.75 C3.5,5.33578644 3.16421356,5 2.75,5 Z" id="形状结合" fill="#FFFFFF"></path>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 771 B After Width: | Height: | Size: 1.0 KiB |
@ -1,3 +1,7 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<path fill="#536076" fill-rule="evenodd" d="M9,3 C9.3147573,3 9.61114562,3.14819416 9.8,3.4 L10.25,4 L13,4 C14.1045695,4 15,4.8954305 15,6 L15,11 C15,12.1045695 14.1045695,13 13,13 L3,13 C1.8954305,13 1,12.1045695 1,11 L1,6 C1,4.8954305 1.8954305,4 3,4 L5.75,4 L6.2,3.4 C6.38885438,3.14819416 6.6852427,3 7,3 L9,3 Z M8,5 C6.06700338,5 4.5,6.56700338 4.5,8.5 C4.5,10.4329966 6.06700338,12 8,12 C9.93299662,12 11.5,10.4329966 11.5,8.5 C11.5,6.56700338 9.93299662,5 8,5 Z M8,6 C9.38071187,6 10.5,7.11928813 10.5,8.5 C10.5,9.88071187 9.38071187,11 8,11 C6.61928813,11 5.5,9.88071187 5.5,8.5 C5.5,7.11928813 6.61928813,6 8,6 Z M13.5,5 C13.2238576,5 13,5.22385763 13,5.5 C13,5.77614237 13.2238576,6 13.5,6 C13.7761424,6 14,5.77614237 14,5.5 C14,5.22385763 13.7761424,5 13.5,5 Z"/>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>buletooth_camera_light</title>
|
||||
<g id="buletooth_camera_light" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<path d="M9,3 C9.3147573,3 9.61114562,3.14819416 9.8,3.4 L10.25,4 L13,4 C14.1045695,4 15,4.8954305 15,6 L15,11 C15,12.1045695 14.1045695,13 13,13 L3,13 C1.8954305,13 1,12.1045695 1,11 L1,6 C1,4.8954305 1.8954305,4 3,4 L5.75,4 L6.2,3.4 C6.38885438,3.14819416 6.6852427,3 7,3 L9,3 Z M8,5 C6.06700338,5 4.5,6.56700338 4.5,8.5 C4.5,10.4329966 6.06700338,12 8,12 C9.93299662,12 11.5,10.4329966 11.5,8.5 C11.5,6.56700338 9.93299662,5 8,5 Z M8,6 C9.38071187,6 10.5,7.11928813 10.5,8.5 C10.5,9.88071187 9.38071187,11 8,11 C6.61928813,11 5.5,9.88071187 5.5,8.5 C5.5,7.11928813 6.61928813,6 8,6 Z M13.5,5 C13.2238576,5 13,5.22385763 13,5.5 C13,5.77614237 13.2238576,6 13.5,6 C13.7761424,6 14,5.77614237 14,5.5 C14,5.22385763 13.7761424,5 13.5,5 Z" id="形状结合" fill="#000000"></path>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 868 B After Width: | Height: | Size: 1.1 KiB |
@ -1,3 +1,7 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<path fill="#536076" fill-rule="evenodd" d="M11,2 C12.1045695,2 13,2.8954305 13,4 L13,13 C13,14.1045695 12.1045695,15 11,15 L5,15 C3.8954305,15 3,14.1045695 3,13 L3,4 C3,2.8954305 3.8954305,2 5,2 L11,2 Z M7,8 C5.34314575,8 4,9.34314575 4,11 C4,12.6568542 5.34314575,14 7,14 C8.65685425,14 10,12.6568542 10,11 C10,9.34314575 8.65685425,8 7,8 Z M7,9.5 C7.82842712,9.5 8.5,10.1715729 8.5,11 C8.5,11.8284271 7.82842712,12.5 7,12.5 C6.17157288,12.5 5.5,11.8284271 5.5,11 C5.5,10.1715729 6.17157288,9.5 7,9.5 Z M9,3 C7.8954305,3 7,3.8954305 7,5 C7,6.1045695 7.8954305,7 9,7 C10.1045695,7 11,6.1045695 11,5 C11,3.8954305 10.1045695,3 9,3 Z M9,4 C9.55228475,4 10,4.44771525 10,5 C10,5.55228475 9.55228475,6 9,6 C8.44771525,6 8,5.55228475 8,5 C8,4.44771525 8.44771525,4 9,4 Z"/>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>buletooth_clang_light</title>
|
||||
<g id="buletooth_clang_light" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<path d="M11,2 C12.1045695,2 13,2.8954305 13,4 L13,13 C13,14.1045695 12.1045695,15 11,15 L5,15 C3.8954305,15 3,14.1045695 3,13 L3,4 C3,2.8954305 3.8954305,2 5,2 L11,2 Z M7,8 C5.34314575,8 4,9.34314575 4,11 C4,12.6568542 5.34314575,14 7,14 C8.65685425,14 10,12.6568542 10,11 C10,9.34314575 8.65685425,8 7,8 Z M7,9.5 C7.82842712,9.5 8.5,10.1715729 8.5,11 C8.5,11.8284271 7.82842712,12.5 7,12.5 C6.17157288,12.5 5.5,11.8284271 5.5,11 C5.5,10.1715729 6.17157288,9.5 7,9.5 Z M9,3 C7.8954305,3 7,3.8954305 7,5 C7,6.1045695 7.8954305,7 9,7 C10.1045695,7 11,6.1045695 11,5 C11,3.8954305 10.1045695,3 9,3 Z M9,4 C9.55228475,4 10,4.44771525 10,5 C10,5.55228475 9.55228475,6 9,6 C8.44771525,6 8,5.55228475 8,5 C8,4.44771525 8.44771525,4 9,4 Z" id="形状结合" fill="#000000"></path>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 863 B After Width: | Height: | Size: 1.1 KiB |
@ -1,3 +1,7 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<path fill="#536076" fill-rule="evenodd" d="M13,4 L3,4 C1.8954305,4 1,4.8954305 1,6 L1,11 C1,12.1045695 1.8954305,13 3,13 L13,13 C14.1045695,13 15,12.1045695 15,11 L15,6 C15,4.8954305 14.1045695,4 13,4 Z M4,6 L2,6 L2,7 L4,7 L4,6 Z M6,6 L5,6 L5,7 L6,7 L6,6 Z M8,6 L7,6 L7,7 L8,7 L8,6 Z M10,6 L9,6 L9,7 L10,7 L10,6 Z M12,6 L11,6 L11,7 L12,7 L12,6 Z M14,6 L13,6 L13,7 L14,7 L14,6 Z M11,11 L5,11 L5,12 L11,12 L11,11 Z M14,9 L11,9 L11,10 L14,10 L14,9 Z M4,9 L2,9 L2,10 L4,10 L4,9 Z M6,9 L5,9 L5,10 L6,10 L6,9 Z M8,9 L7,9 L7,10 L8,10 L8,9 Z M10,9 L9,9 L9,10 L10,10 L10,9 Z"/>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>buletooth_keyboard_light</title>
|
||||
<g id="buletooth_keyboard_light" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<path d="M13,4 L3,4 C1.8954305,4 1,4.8954305 1,6 L1,11 C1,12.1045695 1.8954305,13 3,13 L13,13 C14.1045695,13 15,12.1045695 15,11 L15,6 C15,4.8954305 14.1045695,4 13,4 Z M4,6 L2,6 L2,7 L4,7 L4,6 Z M6,6 L5,6 L5,7 L6,7 L6,6 Z M8,6 L7,6 L7,7 L8,7 L8,6 Z M10,6 L9,6 L9,7 L10,7 L10,6 Z M12,6 L11,6 L11,7 L12,7 L12,6 Z M14,6 L13,6 L13,7 L14,7 L14,6 Z M11,11 L5,11 L5,12 L11,12 L11,11 Z M14,9 L11,9 L11,10 L14,10 L14,9 Z M4,9 L2,9 L2,10 L4,10 L4,9 Z M6,9 L5,9 L5,10 L6,10 L6,9 Z M8,9 L7,9 L7,10 L8,10 L8,9 Z M10,9 L9,9 L9,10 L10,10 L10,9 Z" id="形状" fill="#000000"></path>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 663 B After Width: | Height: | Size: 920 B |
@ -1,3 +1,7 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<path fill="#536076" fill-rule="evenodd" d="M8,7 C8.55228475,7 9,7.44771525 9,8 L9,9 L13,9 C14.1045695,9 15,9.8954305 15,11 L15,12 C15,13.1045695 14.1045695,14 13,14 L3,14 C1.8954305,14 0.999999999,13.1045695 0.999999999,12 L0.999999999,11 C0.999999999,9.8954305 1.8954305,9 3,9 L7,9 L7,8 C7,7.44771525 7.44771525,7 8,7 Z M3.75,10.5 C3.33578644,10.5 3,10.8357864 3,11.25 C3,11.6642136 3.33578644,12 3.75,12 C4.16421356,12 4.5,11.6642136 4.5,11.25 C4.5,10.8357864 4.16421356,10.5 3.75,10.5 Z M6.25,10.5 C5.83578644,10.5 5.5,10.8357864 5.5,11.25 C5.5,11.6642136 5.83578644,12 6.25,12 C6.66421356,12 7,11.6642136 7,11.25 C7,10.8357864 6.66421356,10.5 6.25,10.5 Z M8,4.43579477 C9.6465454,4.43579477 11.1321792,5.08947934 12.1843601,6.13825562 L11.2755628,6.9989637 C10.4560251,6.17090503 9.29167133,5.65369215 8,5.65369215 C6.70780741,5.65369215 5.54303518,6.17132256 4.72344523,6.99996635 L3.81563987,6.13825562 C4.86782077,5.08947934 6.3534546,4.43579477 8,4.43579477 Z M8,2 C10.3553542,2 12.4827521,2.92604569 13.9998287,4.41534116 L13.0920471,5.27668346 C11.8073922,4.00771041 10.0009066,3.21789738 8,3.21789738 C5.99909337,3.21789738 4.1926078,4.00771041 2.90795289,5.27668346 L2.00056858,4.41495114 C3.51761931,2.92588402 5.64485145,2 8,2 Z"/>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>buletooth_lan_light</title>
|
||||
<g id="buletooth_lan_light" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<path d="M8,7 C8.55228475,7 9,7.44771525 9,8 L9,9 L13,9 C14.1045695,9 15,9.8954305 15,11 L15,12 C15,13.1045695 14.1045695,14 13,14 L3,14 C1.8954305,14 0.999999999,13.1045695 0.999999999,12 L0.999999999,11 C0.999999999,9.8954305 1.8954305,9 3,9 L7,9 L7,8 C7,7.44771525 7.44771525,7 8,7 Z M3.75,10.5 C3.33578644,10.5 3,10.8357864 3,11.25 C3,11.6642136 3.33578644,12 3.75,12 C4.16421356,12 4.5,11.6642136 4.5,11.25 C4.5,10.8357864 4.16421356,10.5 3.75,10.5 Z M6.25,10.5 C5.83578644,10.5 5.5,10.8357864 5.5,11.25 C5.5,11.6642136 5.83578644,12 6.25,12 C6.66421356,12 7,11.6642136 7,11.25 C7,10.8357864 6.66421356,10.5 6.25,10.5 Z M8,4.43579477 C9.6465454,4.43579477 11.1321792,5.08947934 12.1843601,6.13825562 L11.2755628,6.9989637 C10.4560251,6.17090503 9.29167133,5.65369215 8,5.65369215 C6.70780741,5.65369215 5.54303518,6.17132256 4.72344523,6.99996635 L3.81563987,6.13825562 C4.86782077,5.08947934 6.3534546,4.43579477 8,4.43579477 Z M8,2 C10.3553542,2 12.4827521,2.92604569 13.9998287,4.41534116 L13.0920471,5.27668346 C11.8073922,4.00771041 10.0009066,3.21789738 8,3.21789738 C5.99909337,3.21789738 4.1926078,4.00771041 2.90795289,5.27668346 L2.00056858,4.41495114 C3.51761931,2.92588402 5.64485145,2 8,2 Z" id="形状结合" fill="#000000"></path>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.6 KiB |
@ -1,3 +1,7 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<path fill="#536076" fill-rule="evenodd" d="M13,3 C14.1045695,3 15,3.8954305 15,5 L15,13 L15.5,13 C15.7761424,13 16,13.2238576 16,13.5 C16,13.7761424 15.7761424,14 15.5,14 L1.5,14 C1.22385763,14 1,13.7761424 1,13.5 C1,13.2238576 1.22385763,13 1.5,13 L2,13 L2,5 C2,3.8954305 2.8954305,3 4,3 L13,3 Z M13,4 L4,4 C3.44771525,4 3,4.44771525 3,5 L3,5 L3,11 C3,11.5522847 3.44771525,12 4,12 L4,12 L13,12 C13.5522847,12 14,11.5522847 14,11 L14,11 L14,5 C14,4.44771525 13.5522847,4 13,4 L13,4 Z"/>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>buletooth_laptop_light</title>
|
||||
<g id="buletooth_laptop_light" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<path d="M13,3 C14.1045695,3 15,3.8954305 15,5 L15,13 L15.5,13 C15.7761424,13 16,13.2238576 16,13.5 C16,13.7761424 15.7761424,14 15.5,14 L1.5,14 C1.22385763,14 1,13.7761424 1,13.5 C1,13.2238576 1.22385763,13 1.5,13 L2,13 L2,5 C2,3.8954305 2.8954305,3 4,3 L13,3 Z M13,4 L4,4 C3.44771525,4 3,4.44771525 3,5 L3,5 L3,11 C3,11.5522847 3.44771525,12 4,12 L4,12 L13,12 C13.5522847,12 14,11.5522847 14,11 L14,11 L14,5 C14,4.44771525 13.5522847,4 13,4 L13,4 Z" id="形状结合" fill="#000000"></path>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 582 B After Width: | Height: | Size: 841 B |
@ -1,3 +1,7 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<path fill="#536076" fill-rule="evenodd" d="M9.97129776,7.3924645 L9.43182891,14.6703097 C9.37629241,15.4200524 8.75179683,16 8,16 C7.24820317,16 6.62370759,15.4200524 6.56817109,14.6703097 L6.02870224,7.3924645 C6.59011897,7.7758262 7.26888019,8 8,8 C8.73111981,8 9.40988103,7.7758262 9.97129776,7.3924645 Z M7.5,9 C7.25454011,9 7.05039163,9.17687516 7.00805567,9.41012437 L7,9.5 L7,10.5 C7,10.7761424 7.22385763,11 7.5,11 C7.74545989,11 7.94960837,10.8231248 7.99194433,10.5898756 L8,10.5 L8,9.5 C8,9.22385763 7.77614237,9 7.5,9 Z M8,1 C9.65685425,1 11,2.34314575 11,4 C11,5.65685425 9.65685425,7 8,7 C6.34314575,7 5,5.65685425 5,4 C5,2.34314575 6.34314575,1 8,1 Z" transform="rotate(45 8 8.5)"/>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>buletooth_microphone_light</title>
|
||||
<g id="buletooth_microphone_light" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<path d="M9.97129776,7.3924645 L9.43182891,14.6703097 C9.37629241,15.4200524 8.75179683,16 8,16 C7.24820317,16 6.62370759,15.4200524 6.56817109,14.6703097 L6.02870224,7.3924645 C6.59011897,7.7758262 7.26888019,8 8,8 C8.73111981,8 9.40988103,7.7758262 9.97129776,7.3924645 Z M7.5,9 C7.25454011,9 7.05039163,9.17687516 7.00805567,9.41012437 L7,9.5 L7,10.5 C7,10.7761424 7.22385763,11 7.5,11 C7.74545989,11 7.94960837,10.8231248 7.99194433,10.5898756 L8,10.5 L8,9.5 C8,9.22385763 7.77614237,9 7.5,9 Z M8,1 C9.65685425,1 11,2.34314575 11,4 C11,5.65685425 9.65685425,7 8,7 C6.34314575,7 5,5.65685425 5,4 C5,2.34314575 6.34314575,1 8,1 Z" id="形状结合" fill="#000000" transform="translate(8.000000, 8.500000) rotate(45.000000) translate(-8.000000, -8.500000) "></path>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 792 B After Width: | Height: | Size: 1.1 KiB |
@ -1,3 +1,7 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<path fill="#536076" fill-rule="evenodd" d="M13,8.53172798 L13,9.53172798 C13,12.2931517 10.7614237,14.531728 8,14.531728 C5.23857625,14.531728 3,12.2931517 3,9.53172798 L3,8.53172798 L13,8.53172798 Z M8,1.53172798 C10.7614237,1.53172798 13,3.77030423 13,6.53172798 L13,7.53172798 L3,7.53172798 L3,6.53172798 C3,3.77030423 5.23857625,1.53172798 8,1.53172798 Z M8,3.53172798 C7.72385763,3.53172798 7.5,3.7555856 7.5,4.03172798 L7.5,4.03172798 L7.5,6.03172798 C7.5,6.30787035 7.72385763,6.53172798 8,6.53172798 C8.27614237,6.53172798 8.5,6.30787035 8.5,6.03172798 L8.5,6.03172798 L8.5,4.03172798 C8.5,3.7555856 8.27614237,3.53172798 8,3.53172798 Z" transform="rotate(45 8 8.032)"/>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>buletooth_mouse_light</title>
|
||||
<g id="buletooth_mouse_light" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<path d="M13,8.53172798 L13,9.53172798 C13,12.2931517 10.7614237,14.531728 8,14.531728 C5.23857625,14.531728 3,12.2931517 3,9.53172798 L3,8.53172798 L13,8.53172798 Z M8,1.53172798 C10.7614237,1.53172798 13,3.77030423 13,6.53172798 L13,7.53172798 L3,7.53172798 L3,6.53172798 C3,3.77030423 5.23857625,1.53172798 8,1.53172798 Z M8,3.53172798 C7.72385763,3.53172798 7.5,3.7555856 7.5,4.03172798 L7.5,4.03172798 L7.5,6.03172798 C7.5,6.30787035 7.72385763,6.53172798 8,6.53172798 C8.27614237,6.53172798 8.5,6.30787035 8.5,6.03172798 L8.5,6.03172798 L8.5,4.03172798 C8.5,3.7555856 8.27614237,3.53172798 8,3.53172798 Z" id="形状结合" fill="#000000" transform="translate(8.000000, 8.031728) rotate(45.000000) translate(-8.000000, -8.031728) "></path>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 773 B After Width: | Height: | Size: 1.1 KiB |
@ -1,3 +1,7 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<path fill="#536076" fill-rule="evenodd" d="M11,2 C12.6568542,2 14,3.34314575 14,5 L14,11 C14,12.6568542 12.6568542,14 11,14 L5,14 C3.34314575,14 2,12.6568542 2,11 L2,5 C2,3.34314575 3.34314575,2 5,2 L11,2 Z M8.21794839,3.04960864 C7.89636093,2.89141423 7.5,3.12236274 7.5,3.5 L7.5,3.5 L7.5,7.138 L4.74806947,5.56587843 L4.66603884,5.52828191 C4.44251729,5.4493158 4.18766064,5.53881167 4.06587843,5.75193053 L4.06587843,5.75193053 L4.02828191,5.83396116 C3.9493158,6.05748271 4.03881167,6.31233936 4.25193053,6.43412157 L4.25193053,6.43412157 L6.991,8 L4.25193053,9.56587843 L4.17789336,9.61746351 C3.99638085,9.76994543 3.94409622,10.0349506 4.06587843,10.2480695 L4.06587843,10.2480695 L4.11746351,10.3221066 C4.26994543,10.5036191 4.5349506,10.5559038 4.74806947,10.4341216 L4.74806947,10.4341216 L7.5,8.861 L7.5,12.5 L7.50682155,12.5844328 C7.56501237,12.9380679 7.98332302,13.1263639 8.2906191,12.9068667 L8.2906191,12.9068667 L11.7906191,10.4068667 L11.8581667,10.3492475 C12.0815493,10.1220755 12.0383123,9.73173147 11.7480695,9.56587843 L11.7480695,9.56587843 L9.008,8 L11.7480695,6.43412157 L11.8210878,6.38361429 C12.0662583,6.18014854 12.06264,5.78743392 11.7906191,5.59313326 L11.7906191,5.59313326 L8.2906191,3.09313326 Z M8.5,8.862 L10.574,10.047 L8.5,11.528 L8.5,8.862 Z M8.5,4.471 L10.574,5.952 L8.5,7.137 L8.5,4.471 Z"/>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>buletooth_other_light</title>
|
||||
<g id="buletooth_other_light" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<path d="M11,2 C12.6568542,2 14,3.34314575 14,5 L14,11 C14,12.6568542 12.6568542,14 11,14 L5,14 C3.34314575,14 2,12.6568542 2,11 L2,5 C2,3.34314575 3.34314575,2 5,2 L11,2 Z M7.71794839,3.04960864 C7.39636093,2.89141423 7,3.12236274 7,3.5 L7,3.5 L7,7.138 L4.24806947,5.56587843 L4.16603884,5.52828191 C3.94251729,5.4493158 3.68766064,5.53881167 3.56587843,5.75193053 L3.56587843,5.75193053 L3.52828191,5.83396116 C3.4493158,6.05748271 3.53881167,6.31233936 3.75193053,6.43412157 L3.75193053,6.43412157 L6.491,8 L3.75193053,9.56587843 L3.67789336,9.61746351 C3.49638085,9.76994543 3.44409622,10.0349506 3.56587843,10.2480695 L3.56587843,10.2480695 L3.61746351,10.3221066 C3.76994543,10.5036191 4.0349506,10.5559038 4.24806947,10.4341216 L4.24806947,10.4341216 L7,8.861 L7,12.5 L7.00682155,12.5844328 C7.06501237,12.9380679 7.48332302,13.1263639 7.7906191,12.9068667 L7.7906191,12.9068667 L11.2906191,10.4068667 L11.3581667,10.3492475 C11.5815493,10.1220755 11.5383123,9.73173147 11.2480695,9.56587843 L11.2480695,9.56587843 L8.508,8 L11.2480695,6.43412157 L11.3210878,6.38361429 C11.5662583,6.18014854 11.56264,5.78743392 11.2906191,5.59313326 L11.2906191,5.59313326 L7.7906191,3.09313326 Z M8,8.862 L10.074,10.047 L8,11.528 L8,8.862 Z M8,4.471 L10.074,5.952 L8,7.137 L8,4.471 Z" id="形状结合" fill="#000000"></path>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.6 KiB |
@ -1,3 +1,7 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<path fill="#536076" fill-rule="evenodd" d="M13,3 C14.1045695,3 15,3.8954305 15,5 L15,11 C15,12.1045695 14.1045695,13 13,13 L3,13 C1.8954305,13 1,12.1045695 1,11 L1,5 C1,3.8954305 1.8954305,3 3,3 L13,3 Z M12,4 L3,4 C2.44771525,4 2,4.44771525 2,5 L2,5 L2,11 C2,11.5522847 2.44771525,12 3,12 L3,12 L12,12 C12.5522847,12 13,11.5522847 13,11 L13,11 L13,5 C13,4.44771525 12.5522847,4 12,4 L12,4 Z M14,7.5 C13.7238576,7.5 13.5,7.72385763 13.5,8 C13.5,8.27614237 13.7238576,8.5 14,8.5 C14.2761424,8.5 14.5,8.27614237 14.5,8 C14.5,7.72385763 14.2761424,7.5 14,7.5 Z"/>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>buletooth_pad_light</title>
|
||||
<g id="buletooth_pad_light" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<path d="M13,3 C14.1045695,3 15,3.8954305 15,5 L15,11 C15,12.1045695 14.1045695,13 13,13 L3,13 C1.8954305,13 1,12.1045695 1,11 L1,5 C1,3.8954305 1.8954305,3 3,3 L13,3 Z M12,4 L3,4 C2.44771525,4 2,4.44771525 2,5 L2,5 L2,11 C2,11.5522847 2.44771525,12 3,12 L3,12 L12,12 C12.5522847,12 13,11.5522847 13,11 L13,11 L13,5 C13,4.44771525 12.5522847,4 12,4 L12,4 Z M14,7.5 C13.7238576,7.5 13.5,7.72385763 13.5,8 C13.5,8.27614237 13.7238576,8.5 14,8.5 C14.2761424,8.5 14.5,8.27614237 14.5,8 C14.5,7.72385763 14.2761424,7.5 14,7.5 Z" id="形状结合" fill="#000000"></path>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 654 B After Width: | Height: | Size: 907 B |
@ -1,3 +1,9 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<path fill="#536076" fill-rule="evenodd" d="M2.5,11 C2.22385763,11 2,10.7761424 2,10.5 C2,10.2238576 2.22385763,10 2.5,10 L6,10 L6,9 L1,9 C0.44771525,9 6.76353751e-17,8.55228475 0,8 L13,8 C13,8.55228475 12.5522847,9 12,9 L7,9 L7,10 L10.5,10 C10.7761424,10 11,10.2238576 11,10.5 C11,10.7761424 10.7761424,11 10.5,11 L2.5,11 Z M11,0 C12.1045695,-2.02906125e-16 13,0.8954305 13,2 L13,7 L0,7 L0,2 C-1.3527075e-16,0.8954305 0.8954305,2.02906125e-16 2,0 L11,0 Z" transform="translate(2 3)"/>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>buletooth_pc_light</title>
|
||||
<g id="buletooth_pc_light" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="编组-4" transform="translate(2.000000, 3.000000)" fill="#000000">
|
||||
<path d="M2.5,11 C2.22385763,11 2,10.7761424 2,10.5 C2,10.2238576 2.22385763,10 2.5,10 L6,10 L6,9 L1,9 C0.44771525,9 6.76353751e-17,8.55228475 0,8 L13,8 C13,8.55228475 12.5522847,9 12,9 L7,9 L7,10 L10.5,10 C10.7761424,10 11,10.2238576 11,10.5 C11,10.7761424 10.7761424,11 10.5,11 L2.5,11 Z M11,0 C12.1045695,-2.02906125e-16 13,0.8954305 13,2 L13,7 L0,7 L0,2 C-1.3527075e-16,0.8954305 0.8954305,2.02906125e-16 2,0 L11,0 Z" id="形状结合"></path>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 579 B After Width: | Height: | Size: 888 B |
@ -1,3 +1,7 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<path fill="#536076" fill-rule="evenodd" d="M5.40009062,12.9559895 L2.79944555,13.4807163 C2.66410182,13.5080243 2.53224653,13.4204441 2.5049385,13.2851003 C2.49835429,13.2524677 2.49835383,13.2188487 2.50493716,13.1862159 L3.02967395,10.5851562 L3.02967395,10.5851562 L9.70545583,3.90977002 C9.90070318,3.71449308 10.2172857,3.71450246 10.412542,3.9097704 C10.4125489,3.90977726 10.4125557,3.90978412 10.412542,3.90981157 L12.0763307,5.57389266 C12.2715761,5.76917159 12.2715482,6.08575408 12.0762689,6.28099907 C12.0762688,6.28099919 12.0762687,6.28099931 12.0762682,6.28099907 L5.40009062,12.9559895 L5.40009062,12.9559895 Z M13.8391542,3.8098192 L12.1751352,2.14638503 C11.9798394,1.95115657 11.6632569,1.95121221 11.4680291,2.14650867 C11.4680289,2.14650888 11.4680287,2.14650909 11.4680291,2.14650993 L11.001677,2.61302763 C10.8066232,2.80840055 10.8066235,3.12488673 11.0016776,3.32025929 L12.6655284,4.98469494 C12.860506,5.18024154 13.1770885,5.18029717 13.372385,4.98506934 C13.3724684,4.98498593 13.3725518,4.98490248 13.3723849,4.98456895 L13.8394045,4.51705195 C14.0343874,4.32160917 14.0342754,4.00512389 13.8391542,3.8098192 Z"/>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>buletooth_pen_light</title>
|
||||
<g id="buletooth_pen_light" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<path d="M5.40009062,12.9559895 L2.79944555,13.4807163 C2.66410182,13.5080243 2.53224653,13.4204441 2.5049385,13.2851003 C2.49835429,13.2524677 2.49835383,13.2188487 2.50493716,13.1862159 L3.02967395,10.5851562 L3.02967395,10.5851562 L9.70545583,3.90977002 C9.90070318,3.71449308 10.2172857,3.71450246 10.412542,3.9097704 C10.4125489,3.90977726 10.4125557,3.90978412 10.412542,3.90981157 L12.0763307,5.57389266 C12.2715761,5.76917159 12.2715482,6.08575408 12.0762689,6.28099907 C12.0762688,6.28099919 12.0762687,6.28099931 12.0762682,6.28099907 L5.40009062,12.9559895 L5.40009062,12.9559895 Z M13.8391542,3.8098192 L12.1751352,2.14638503 C11.9798394,1.95115657 11.6632569,1.95121221 11.4680291,2.14650867 C11.4680289,2.14650888 11.4680287,2.14650909 11.4680291,2.14650993 L11.001677,2.61302763 C10.8066232,2.80840055 10.8066235,3.12488673 11.0016776,3.32025929 L12.6655284,4.98469494 C12.860506,5.18024154 13.1770885,5.18029717 13.372385,4.98506934 C13.3724684,4.98498593 13.3725518,4.98490248 13.3723849,4.98456895 L13.8394045,4.51705195 C14.0343874,4.32160917 14.0342754,4.00512389 13.8391542,3.8098192 Z" id="形状" fill="#000000"></path>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.5 KiB |
@ -1,3 +1,7 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<path fill="#536076" fill-rule="evenodd" d="M5,8 C6.1045695,8 7,8.8954305 7,10 L7,12 C7,13.0543618 6.18412221,13.9181651 5.14926234,13.9945143 L5,14 L5,8 Z M11,8 L11,14 L10.8507377,13.9945143 C9.81587779,13.9181651 9,13.0543618 9,12 L9,12 L9,10 C9,8.8954305 9.8954305,8 11,8 L11,8 Z M4,9 L4,13 C3.44771525,13 3,12.5522847 3,12 L3,10 C3,9.48716416 3.38604019,9.06449284 3.88337887,9.00672773 L4,9 Z M12,9 L12.1166211,9.00672773 C12.6139598,9.06449284 13,9.48716416 13,10 L13,10 L13,12 C13,12.5522847 12.5522847,13 12,13 L12,13 L12,9 Z M8,1.5 C11.7854517,1.5 14.8690987,4.50478338 14.995941,8.25935025 L15,8.5 L15,11 C15,11.2761424 14.7761424,11.5 14.5,11.5 C14.2545401,11.5 14.0503916,11.3231248 14.0080557,11.0898756 L14,11 L14,8.5 C14,5.1862915 11.3137085,2.5 8,2.5 C4.76160306,2.5 2.12242824,5.06557489 2.00413847,8.27506174 L2,8.5 L2,11 C2,11.2761424 1.77614237,11.5 1.5,11.5 C1.25454011,11.5 1.05039163,11.3231248 1.00805567,11.0898756 L1,11 L1,8.5 C1,4.63400675 4.13400675,1.5 8,1.5 Z"/>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>buletooth_pheadset_light</title>
|
||||
<g id="buletooth_pheadset_light" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<path d="M5,8 C6.1045695,8 7,8.8954305 7,10 L7,12 C7,13.0543618 6.18412221,13.9181651 5.14926234,13.9945143 L5,14 L5,8 Z M11,8 L11,14 L10.8507377,13.9945143 C9.81587779,13.9181651 9,13.0543618 9,12 L9,12 L9,10 C9,8.8954305 9.8954305,8 11,8 L11,8 Z M4,9 L4,13 C3.44771525,13 3,12.5522847 3,12 L3,10 C3,9.48716416 3.38604019,9.06449284 3.88337887,9.00672773 L4,9 Z M12,9 L12.1166211,9.00672773 C12.6139598,9.06449284 13,9.48716416 13,10 L13,10 L13,12 C13,12.5522847 12.5522847,13 12,13 L12,13 L12,9 Z M8,1.5 C11.7854517,1.5 14.8690987,4.50478338 14.995941,8.25935025 L15,8.5 L15,11 C15,11.2761424 14.7761424,11.5 14.5,11.5 C14.2545401,11.5 14.0503916,11.3231248 14.0080557,11.0898756 L14,11 L14,8.5 C14,5.1862915 11.3137085,2.5 8,2.5 C4.76160306,2.5 2.12242824,5.06557489 2.00413847,8.27506174 L2,8.5 L2,11 C2,11.2761424 1.77614237,11.5 1.5,11.5 C1.25454011,11.5 1.05039163,11.3231248 1.00805567,11.0898756 L1,11 L1,8.5 C1,4.63400675 4.13400675,1.5 8,1.5 Z" id="形状结合" fill="#000000"></path>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.3 KiB |
@ -1,3 +1,7 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<path fill="#536076" fill-rule="evenodd" d="M11,1 C12.1045695,1 13,1.8954305 13,3 L13,13 C13,14.1045695 12.1045695,15 11,15 L6,15 C4.8954305,15 4,14.1045695 4,13 L4,3 C4,1.8954305 4.8954305,1 6,1 L11,1 Z M11,2 L6,2 C5.44771525,2 5,2.44771525 5,3 L5,3 L5,13 C5,13.5522847 5.44771525,14 6,14 L6,14 L11,14 C11.5522847,14 12,13.5522847 12,13 L12,13 L12,3 C12,2.44771525 11.5522847,2 11,2 L11,2 Z M9.5,3 C9.77614237,3 10,3.22385763 10,3.5 C10,3.77614237 9.77614237,4 9.5,4 L7.5,4 C7.22385763,4 7,3.77614237 7,3.5 C7,3.22385763 7.22385763,3 7.5,3 L9.5,3 Z"/>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>buletooth_phone_light</title>
|
||||
<g id="buletooth_phone_light" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<path d="M11,1 C12.1045695,1 13,1.8954305 13,3 L13,13 C13,14.1045695 12.1045695,15 11,15 L6,15 C4.8954305,15 4,14.1045695 4,13 L4,3 C4,1.8954305 4.8954305,1 6,1 L11,1 Z M11,2 L6,2 C5.44771525,2 5,2.44771525 5,3 L5,3 L5,13 C5,13.5522847 5.44771525,14 6,14 L6,14 L11,14 C11.5522847,14 12,13.5522847 12,13 L12,13 L12,3 C12,2.44771525 11.5522847,2 11,2 L11,2 Z M9.5,3 C9.77614237,3 10,3.22385763 10,3.5 C10,3.77614237 9.77614237,4 9.5,4 L7.5,4 C7.22385763,4 7,3.77614237 7,3.5 C7,3.22385763 7.22385763,3 7.5,3 L9.5,3 Z" id="形状结合" fill="#000000"></path>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 646 B After Width: | Height: | Size: 903 B |
@ -1,3 +1,7 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<path fill="#536076" fill-rule="evenodd" d="M10.5,10 C10.7761424,10 11,10.2238576 11,10.5 L11,13.5 C11,13.7761424 10.7761424,14 10.5,14 L5.5,14 C5.22385763,14 5,13.7761424 5,13.5 L5,10.5 C5,10.2238576 5.22385763,10 5.5,10 L10.5,10 Z M13,5 C14.1045695,5 15,5.8954305 15,7 L15,11 C15,12.1045695 14.1045695,13 13,13 L12,13 L12,10.5 C12,9.72030388 11.4051119,9.07955132 10.64446,9.00686658 L10.5,9 L5.5,9 C4.72030388,9 4.07955132,9.59488808 4.00686658,10.35554 L4,10.5 L4,13 L3,13 C1.8954305,13 1,12.1045695 1,11 L1,7 C1,5.8954305 1.8954305,5 3,5 L13,5 Z M8.5,12 L6.5,12 C6.22385763,12 6,12.2238576 6,12.5 C6,12.7454599 6.17687516,12.9496084 6.41012437,12.9919443 L6.5,13 L8.5,13 C8.77614237,13 9,12.7761424 9,12.5 C9,12.2238576 8.77614237,12 8.5,12 Z M10.5,2 C10.7761424,2 11,2.22385763 11,2.5 L11,4 L5,4 L5,2.5 C5,2.22385763 5.22385763,2 5.5,2 L10.5,2 Z"/>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>buletooth_print_light</title>
|
||||
<g id="buletooth_print_light" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<path d="M10.5,10 C10.7761424,10 11,10.2238576 11,10.5 L11,13.5 C11,13.7761424 10.7761424,14 10.5,14 L5.5,14 C5.22385763,14 5,13.7761424 5,13.5 L5,10.5 C5,10.2238576 5.22385763,10 5.5,10 L10.5,10 Z M13,5 C14.1045695,5 15,5.8954305 15,7 L15,11 C15,12.1045695 14.1045695,13 13,13 L12,13 L12,10.5 C12,9.72030388 11.4051119,9.07955132 10.64446,9.00686658 L10.5,9 L5.5,9 C4.72030388,9 4.07955132,9.59488808 4.00686658,10.35554 L4,10.5 L4,13 L3,13 C1.8954305,13 1,12.1045695 1,11 L1,7 C1,5.8954305 1.8954305,5 3,5 L13,5 Z M8.5,12 L6.5,12 C6.22385763,12 6,12.2238576 6,12.5 C6,12.7454599 6.17687516,12.9496084 6.41012437,12.9919443 L6.5,13 L8.5,13 C8.77614237,13 9,12.7761424 9,12.5 C9,12.2238576 8.77614237,12 8.5,12 Z M10.5,2 C10.7761424,2 11,2.22385763 11,2.5 L11,4 L5,4 L5,2.5 C5,2.22385763 5.22385763,2 5.5,2 L10.5,2 Z" id="形状结合" fill="#000000"></path>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 948 B After Width: | Height: | Size: 1.2 KiB |
@ -1,3 +1,7 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<path fill="#536076" fill-rule="evenodd" d="M13.5,10 C13.7761424,10 14,10.2238576 14,10.5 L14,12 C14,13.1045695 13.1045695,14 12,14 L10.5,14 C10.2238576,14 10,13.7761424 10,13.5 C10,13.2238576 10.2238576,13 10.5,13 L12,13 C12.5522847,13 13,12.5522847 13,12 L13,10.5 C13,10.2238576 13.2238576,10 13.5,10 Z M2.5,10 C2.77614237,10 3,10.2238576 3,10.5 L3,10.5 L3,12 C3,12.5522847 3.44771525,13 4,13 L4,13 L5.5,13 C5.77614237,13 6,13.2238576 6,13.5 C6,13.7761424 5.77614237,14 5.5,14 L5.5,14 L4,14 C2.8954305,14 2,13.1045695 2,12 L2,12 L2,10.5 C2,10.2238576 2.22385763,10 2.5,10 Z M12,10 L12,11 C12,11.5522847 11.5522847,12 11,12 L5,12 C4.44771525,12 4,11.5522847 4,11 L4,10 L12,10 Z M13.5,8 C13.7761424,8 14,8.22385763 14,8.5 C14,8.77614237 13.7761424,9 13.5,9 L2.5,9 C2.22385763,9 2,8.77614237 2,8.5 C2,8.22385763 2.22385763,8 2.5,8 L13.5,8 Z M11,4 C11.5522847,4 12,4.44771525 12,5 L12,7 L4,7 L4,5 C4,4.44771525 4.44771525,4 5,4 L11,4 Z M5.5,2 C5.77614237,2 6,2.22385763 6,2.5 C6,2.77614237 5.77614237,3 5.5,3 L4,3 C3.44771525,3 3,3.44771525 3,4 L3,5.5 C3,5.77614237 2.77614237,6 2.5,6 C2.22385763,6 2,5.77614237 2,5.5 L2,4 C2,2.8954305 2.8954305,2 4,2 L5.5,2 Z M12,2 C13.1045695,2 14,2.8954305 14,4 L14,4 L14,5.5 C14,5.77614237 13.7761424,6 13.5,6 C13.2238576,6 13,5.77614237 13,5.5 L13,5.5 L13,4 C13,3.44771525 12.5522847,3 12,3 L12,3 L10.5,3 C10.2238576,3 10,2.77614237 10,2.5 C10,2.22385763 10.2238576,2 10.5,2 L10.5,2 Z"/>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>buletooth_scaner_light</title>
|
||||
<g id="buletooth_scaner_light" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<path d="M13.5,10 C13.7761424,10 14,10.2238576 14,10.5 L14,12 C14,13.1045695 13.1045695,14 12,14 L10.5,14 C10.2238576,14 10,13.7761424 10,13.5 C10,13.2238576 10.2238576,13 10.5,13 L12,13 C12.5522847,13 13,12.5522847 13,12 L13,10.5 C13,10.2238576 13.2238576,10 13.5,10 Z M2.5,10 C2.77614237,10 3,10.2238576 3,10.5 L3,10.5 L3,12 C3,12.5522847 3.44771525,13 4,13 L4,13 L5.5,13 C5.77614237,13 6,13.2238576 6,13.5 C6,13.7761424 5.77614237,14 5.5,14 L5.5,14 L4,14 C2.8954305,14 2,13.1045695 2,12 L2,12 L2,10.5 C2,10.2238576 2.22385763,10 2.5,10 Z M12,10 L12,11 C12,11.5522847 11.5522847,12 11,12 L5,12 C4.44771525,12 4,11.5522847 4,11 L4,10 L12,10 Z M13.5,8 C13.7761424,8 14,8.22385763 14,8.5 C14,8.77614237 13.7761424,9 13.5,9 L2.5,9 C2.22385763,9 2,8.77614237 2,8.5 C2,8.22385763 2.22385763,8 2.5,8 L13.5,8 Z M11,4 C11.5522847,4 12,4.44771525 12,5 L12,7 L4,7 L4,5 C4,4.44771525 4.44771525,4 5,4 L11,4 Z M5.5,2 C5.77614237,2 6,2.22385763 6,2.5 C6,2.77614237 5.77614237,3 5.5,3 L4,3 C3.44771525,3 3,3.44771525 3,4 L3,5.5 C3,5.77614237 2.77614237,6 2.5,6 C2.22385763,6 2,5.77614237 2,5.5 L2,4 C2,2.8954305 2.8954305,2 4,2 L5.5,2 Z M12,2 C13.1045695,2 14,2.8954305 14,4 L14,4 L14,5.5 C14,5.77614237 13.7761424,6 13.5,6 C13.2238576,6 13,5.77614237 13,5.5 L13,5.5 L13,4 C13,3.44771525 12.5522847,3 12,3 L12,3 L10.5,3 C10.2238576,3 10,2.77614237 10,2.5 C10,2.22385763 10.2238576,2 10.5,2 L10.5,2 Z" id="形状结合" fill="#000000"></path>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.7 KiB |
@ -1,3 +1,7 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<path fill="#536076" fill-rule="evenodd" d="M15,8 L15,11 C15,12.1045695 14.1045695,13 13,13 L4,13 C2.8954305,13 2,12.1045695 2,11 L2,8 L15,8 Z M2,7 L2,5 C2,3.8954305 2.8954305,3 4,3 L8,3 L8,7 L2,7 Z M9,3 L13,3 C14.1045695,3 15,3.8954305 15,5 L15,7 L9,7 L9,3 Z"/>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>buletooth_touchpad_light</title>
|
||||
<g id="buletooth_touchpad_light" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<path d="M15,8 L15,11 C15,12.1045695 14.1045695,13 13,13 L4,13 C2.8954305,13 2,12.1045695 2,11 L2,8 L15,8 Z M2,7 L2,5 C2,3.8954305 2.8954305,3 4,3 L8,3 L8,7 L2,7 Z M9,3 L13,3 C14.1045695,3 15,3.8954305 15,5 L15,7 L9,7 L9,3 Z" id="Combined-Shape" fill="#000000"></path>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 356 B After Width: | Height: | Size: 621 B |
@ -1,6 +1,8 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path fill="#536076" d="M12,4 C13.6568542,4 15,5.34314575 15,7 L15,11 C15,12.6568542 13.6568542,14 12,14 L5,14 C3.34314575,14 2,12.6568542 2,11 L2,7 C2,5.34314575 3.34314575,4 5,4 L12,4 Z M12,5 L5,5 C3.9456382,5 3.08183488,5.81587779 3.00548574,6.85073766 L3,7 L3,11 C3,12.0543618 3.81587779,12.9181651 4.85073766,12.9945143 L5,13 L12,13 C13.0543618,13 13.9181651,12.1841222 13.9945143,11.1492623 L14,11 L14,7 C14,5.8954305 13.1045695,5 12,5 Z M12,6 C12.5522847,6 13,6.44771525 13,7 L13,11 C13,11.5522847 12.5522847,12 12,12 L5,12 C4.44771525,12 4,11.5522847 4,11 L4,7 C4,6.44771525 4.44771525,6 5,6 L12,6 Z M7.47058824,7 L5,7 L5,7.8 L5.82352941,7.8 L5.82352941,11 L6.64705882,11 L6.64705882,7.8 L7.47058824,7.8 L7.47058824,7 Z M9.14917766,7 L8.2726478,7 L9.66165358,11 L10.6081938,11 L12,7 L11.1234701,7 L10.3477552,9.38030096 C10.2282709,9.7998176 10.1582605,10.0934793 10.1377241,10.2612859 C10.1265224,10.1883265 10.0980516,10.0583675 10.0523115,9.87140903 C10.021818,9.74677003 9.99194696,9.63246694 9.96269818,9.52849977 L9.91929175,9.38030096 L9.14917766,7 Z"/>
|
||||
<path fill="#536076" d="M7,0.5 C7.24545989,0.5 7.44960837,0.676875161 7.49194433,0.910124368 L7.5,1 L7.5,3.5 L10,3.5 C10.2454599,3.5 10.4496084,3.67687516 10.4919443,3.91012437 L10.5,4 C10.5,4.24545989 10.3231248,4.44960837 10.0898756,4.49194433 L10,4.5 L7,4.5 L6.5,4 L6.5,1 C6.5,0.723857625 6.72385763,0.5 7,0.5 Z" transform="rotate(-45 8.5 2.5)"/>
|
||||
</g>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>buletooth_tv_light</title>
|
||||
<g id="buletooth_tv_light" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<path d="M12,4 C13.6568542,4 15,5.34314575 15,7 L15,11 C15,12.6568542 13.6568542,14 12,14 L5,14 C3.34314575,14 2,12.6568542 2,11 L2,7 C2,5.34314575 3.34314575,4 5,4 L12,4 Z M12,5 L5,5 C3.9456382,5 3.08183488,5.81587779 3.00548574,6.85073766 L3,7 L3,11 C3,12.0543618 3.81587779,12.9181651 4.85073766,12.9945143 L5,13 L12,13 C13.0543618,13 13.9181651,12.1841222 13.9945143,11.1492623 L14,11 L14,7 C14,5.8954305 13.1045695,5 12,5 Z M12,6 C12.5522847,6 13,6.44771525 13,7 L13,11 C13,11.5522847 12.5522847,12 12,12 L5,12 C4.44771525,12 4,11.5522847 4,11 L4,7 C4,6.44771525 4.44771525,6 5,6 L12,6 Z M7.47058824,7 L5,7 L5,7.8 L5.82352941,7.8 L5.82352941,11 L6.64705882,11 L6.64705882,7.8 L7.47058824,7.8 L7.47058824,7 Z M9.14917766,7 L8.2726478,7 L9.66165358,11 L10.6081938,11 L12,7 L11.1234701,7 L10.3477552,9.38030096 C10.2282709,9.7998176 10.1582605,10.0934793 10.1377241,10.2612859 C10.1265224,10.1883265 10.0980516,10.0583675 10.0523115,9.87140903 C10.021818,9.74677003 9.99194696,9.63246694 9.96269818,9.52849977 L9.91929175,9.38030096 L9.14917766,7 Z" id="形状结合" fill="#000000"></path>
|
||||
<path d="M7,0.5 C7.24545989,0.5 7.44960837,0.676875161 7.49194433,0.910124368 L7.5,1 L7.5,3.5 L10,3.5 C10.2454599,3.5 10.4496084,3.67687516 10.4919443,3.91012437 L10.5,4 C10.5,4.24545989 10.3231248,4.44960837 10.0898756,4.49194433 L10,4.5 L7,4.5 L6.5,4 L6.5,1 C6.5,0.723857625 6.72385763,0.5 7,0.5 Z" id="路径-5" fill="#000000" transform="translate(8.500000, 2.500000) rotate(-45.000000) translate(-8.500000, -2.500000) "></path>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.8 KiB |
@ -1,3 +1,7 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<path fill="#536076" fill-rule="evenodd" d="M9,4 C10.1045695,4 11,4.8954305 11,6 L11,11 C11,12.1045695 10.1045695,13 9,13 L3,13 C1.8954305,13 1,12.1045695 1,11 L1,6 C1,4.8954305 1.8954305,4 3,4 L9,4 Z M14.8466082,6.01915086 C14.9459035,6.14326999 15,6.29748735 15,6.45643739 L15,11.5435626 C15,11.9301619 14.6865993,12.2435626 14.3,12.2435626 C14.14105,12.2435626 13.9868326,12.1894661 13.8627135,12.0901708 L12,10.6 L12,7.4 L13.8627135,5.90982923 C14.1645968,5.66832254 14.6051015,5.71726751 14.8466082,6.01915086 Z M2.75,5 C2.33578644,5 2,5.33578644 2,5.75 C2,6.16421356 2.33578644,6.5 2.75,6.5 C3.16421356,6.5 3.5,6.16421356 3.5,5.75 C3.5,5.33578644 3.16421356,5 2.75,5 Z"/>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>buletooth_vidicon_light</title>
|
||||
<g id="buletooth_vidicon_light" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<path d="M9,4 C10.1045695,4 11,4.8954305 11,6 L11,11 C11,12.1045695 10.1045695,13 9,13 L3,13 C1.8954305,13 1,12.1045695 1,11 L1,6 C1,4.8954305 1.8954305,4 3,4 L9,4 Z M14.8466082,6.01915086 C14.9459035,6.14326999 15,6.29748735 15,6.45643739 L15,11.5435626 C15,11.9301619 14.6865993,12.2435626 14.3,12.2435626 C14.14105,12.2435626 13.9868326,12.1894661 13.8627135,12.0901708 L12,10.6 L12,7.4 L13.8627135,5.90982923 C14.1645968,5.66832254 14.6051015,5.71726751 14.8466082,6.01915086 Z M2.75,5 C2.33578644,5 2,5.33578644 2,5.75 C2,6.16421356 2.33578644,6.5 2.75,6.5 C3.16421356,6.5 3.5,6.16421356 3.5,5.75 C3.5,5.33578644 3.16421356,5 2.75,5 Z" id="形状结合" fill="#000000"></path>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 771 B After Width: | Height: | Size: 1.0 KiB |
@ -1,3 +1,3 @@
|
||||
{
|
||||
"api": "1.1.1"
|
||||
"api": "1.2.3"
|
||||
}
|
||||
|
@ -42,6 +42,11 @@ DatetimePlugin::DatetimePlugin(QObject *parent)
|
||||
sessionBus.connect("com.deepin.daemon.Timedate", "/com/deepin/daemon/Timedate", "org.freedesktop.DBus.Properties", "PropertiesChanged", this, SLOT(propertiesChanged()));
|
||||
}
|
||||
|
||||
PluginsItemInterface::PluginSizePolicy DatetimePlugin::pluginSizePolicy() const
|
||||
{
|
||||
return PluginsItemInterface::Custom;
|
||||
}
|
||||
|
||||
const QString DatetimePlugin::pluginName() const
|
||||
{
|
||||
return "datetime";
|
||||
|
@ -42,6 +42,8 @@ class DatetimePlugin : public QObject, PluginsItemInterface
|
||||
public:
|
||||
explicit DatetimePlugin(QObject *parent = nullptr);
|
||||
|
||||
PluginSizePolicy pluginSizePolicy() const override;
|
||||
|
||||
const QString pluginName() const override;
|
||||
const QString pluginDisplayName() const override;
|
||||
void init(PluginProxyInterface *proxyInter) override;
|
||||
|
@ -29,7 +29,6 @@
|
||||
#include <dswitchbutton.h>
|
||||
|
||||
DWIDGET_USE_NAMESPACE
|
||||
class TipsWidget;
|
||||
class QLabel;
|
||||
class DeviceControlWidget : public QWidget
|
||||
{
|
||||
|
@ -285,8 +285,11 @@ void WiredItem::deviceStateChanged(NetworkDevice::DeviceStatus state)
|
||||
|
||||
void WiredItem::changedActiveWiredConnectionInfo(const QJsonObject &connInfo)
|
||||
{
|
||||
if (connInfo.isEmpty())
|
||||
if (connInfo.isEmpty()) {
|
||||
m_stateButton->setVisible(false);
|
||||
} else {
|
||||
m_stateButton->setVisible(true);
|
||||
}
|
||||
|
||||
auto strTitle = connInfo.value("ConnectionName").toString();
|
||||
m_connectedName->setText(strTitle);
|
||||
|
@ -519,6 +519,8 @@ void NetworkItem::getPluginState()
|
||||
state |= temp;
|
||||
if ((temp & WirelessItem::Connected) >> 18) {
|
||||
m_connectedWirelessDevice.insert(iwireless.key(), wirelessItem);
|
||||
} else {
|
||||
m_connectedWirelessDevice.remove(iwireless.key());
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -564,6 +566,8 @@ void NetworkItem::getPluginState()
|
||||
state |= temp;
|
||||
if ((temp & WiredItem::Connected) >> 2) {
|
||||
m_connectedWiredDevice.insert(iwired.key(), wiredItem);
|
||||
} else {
|
||||
m_connectedWiredDevice.remove(iwired.key());
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1171,10 +1175,10 @@ void NetworkItem::refreshTips()
|
||||
if (wirelessItem) {
|
||||
auto info = wirelessItem->getActiveWirelessConnectionInfo();
|
||||
if (!info.contains("Ip4"))
|
||||
break;
|
||||
continue;
|
||||
const QJsonObject ipv4 = info.value("Ip4").toObject();
|
||||
if (!ipv4.contains("Address"))
|
||||
break;
|
||||
continue;
|
||||
if (m_connectedWirelessDevice.size() == 1) {
|
||||
strTips = tr("Wireless connection: %1").arg(ipv4.value("Address").toString()) + '\n';
|
||||
} else {
|
||||
@ -1188,10 +1192,10 @@ void NetworkItem::refreshTips()
|
||||
if (wiredItem) {
|
||||
auto info = wiredItem->getActiveWiredConnectionInfo();
|
||||
if (!info.contains("Ip4"))
|
||||
break;
|
||||
continue;
|
||||
const QJsonObject ipv4 = info.value("Ip4").toObject();
|
||||
if (!ipv4.contains("Address"))
|
||||
break;
|
||||
continue;
|
||||
if (m_connectedWiredDevice.size() == 1) {
|
||||
strTips = tr("Wired connection: %1").arg(ipv4.value("Address").toString()) + '\n';
|
||||
} else {
|
||||
@ -1212,10 +1216,10 @@ void NetworkItem::refreshTips()
|
||||
if (wirelessItem) {
|
||||
auto info = wirelessItem->getActiveWirelessConnectionInfo();
|
||||
if (!info.contains("Ip4"))
|
||||
break;
|
||||
continue;
|
||||
const QJsonObject ipv4 = info.value("Ip4").toObject();
|
||||
if (!ipv4.contains("Address"))
|
||||
break;
|
||||
continue;
|
||||
if (m_connectedWiredDevice.size() == 1) {
|
||||
strTips = tr("Wireless connection: %1").arg(ipv4.value("Address").toString()) + '\n';
|
||||
} else {
|
||||
@ -1236,10 +1240,10 @@ void NetworkItem::refreshTips()
|
||||
if (wiredItem) {
|
||||
auto info = wiredItem->getActiveWiredConnectionInfo();
|
||||
if (!info.contains("Ip4"))
|
||||
break;
|
||||
continue;
|
||||
const QJsonObject ipv4 = info.value("Ip4").toObject();
|
||||
if (!ipv4.contains("Address"))
|
||||
break;
|
||||
continue;
|
||||
if (m_connectedWiredDevice.size() == 1) {
|
||||
strTips = tr("Wired connection: %1").arg(ipv4.value("Address").toString()) + '\n';
|
||||
} else {
|
||||
|
@ -1,53 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2015 ~ 2018 Deepin Technology Co., Ltd.
|
||||
*
|
||||
* Author: sbw <sbw@sbw.so>
|
||||
* kirigaya <kirigaya@mkacg.com>
|
||||
* Hualet <mr.asianwang@gmail.com>
|
||||
*
|
||||
* Maintainer: sbw <sbw@sbw.so>
|
||||
* kirigaya <kirigaya@mkacg.com>
|
||||
* Hualet <mr.asianwang@gmail.com>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/*
|
||||
* This file was generated by qdbusxml2cpp version 0.8
|
||||
* Command line was: qdbusxml2cpp -c DBusLogin1Manager -p dbuslogin1manager orgfreedesktop.login1.xml
|
||||
*
|
||||
* qdbusxml2cpp is Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
|
||||
*
|
||||
* This is an auto-generated file.
|
||||
* This file may have been hand-edited. Look for HAND-EDIT comments
|
||||
* before re-generating it.
|
||||
*/
|
||||
|
||||
#include "dbuslogin1manager.h"
|
||||
|
||||
/*
|
||||
* Implementation of interface class DBusLogin1Manager
|
||||
*/
|
||||
|
||||
DBusLogin1Manager::DBusLogin1Manager(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent)
|
||||
: QDBusAbstractInterface(service, path, staticInterfaceName(), connection, parent)
|
||||
{
|
||||
QDBusConnection::systemBus().connect(this->service(), this->path(), "org.freedesktop.DBus.Properties", "PropertiesChanged","sa{sv}as", this, SLOT(__propertyChanged__(QDBusMessage)));
|
||||
}
|
||||
|
||||
DBusLogin1Manager::~DBusLogin1Manager()
|
||||
{
|
||||
QDBusConnection::systemBus().disconnect(this->service(), this->path(), "org.freedesktop.DBus.Properties", "PropertiesChanged","sa{sv}as", this, SLOT(__propertyChanged__(QDBusMessage)));
|
||||
}
|
||||
|
@ -1,413 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2015 ~ 2018 Deepin Technology Co., Ltd.
|
||||
*
|
||||
* Author: sbw <sbw@sbw.so>
|
||||
* kirigaya <kirigaya@mkacg.com>
|
||||
* Hualet <mr.asianwang@gmail.com>
|
||||
*
|
||||
* Maintainer: sbw <sbw@sbw.so>
|
||||
* kirigaya <kirigaya@mkacg.com>
|
||||
* Hualet <mr.asianwang@gmail.com>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/*
|
||||
* This file was generated by qdbusxml2cpp version 0.8
|
||||
* Command line was: qdbusxml2cpp -c DBusLogin1Manager -p dbuslogin1manager orgfreedesktop.login1.xml
|
||||
*
|
||||
* qdbusxml2cpp is Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
|
||||
*
|
||||
* This is an auto-generated file.
|
||||
* Do not edit! All changes made to it will be lost.
|
||||
*/
|
||||
|
||||
#ifndef DBUSLOGIN1MANAGER_H_1447400884
|
||||
#define DBUSLOGIN1MANAGER_H_1447400884
|
||||
|
||||
#include <QtCore/QObject>
|
||||
#include <QtCore/QByteArray>
|
||||
#include <QtCore/QList>
|
||||
#include <QtCore/QMap>
|
||||
#include <QtCore/QString>
|
||||
#include <QtCore/QStringList>
|
||||
#include <QtCore/QVariant>
|
||||
#include <QtDBus/QtDBus>
|
||||
|
||||
/*
|
||||
* Proxy class for interface org.freedesktop.login1.Manager
|
||||
*/
|
||||
class DBusLogin1Manager: public QDBusAbstractInterface
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_SLOT void __propertyChanged__(const QDBusMessage& msg)
|
||||
{
|
||||
QList<QVariant> arguments = msg.arguments();
|
||||
if (3 != arguments.count())
|
||||
return;
|
||||
QString interfaceName = msg.arguments().at(0).toString();
|
||||
if (interfaceName !="org.freedesktop.login1.Manager")
|
||||
return;
|
||||
QVariantMap changedProps = qdbus_cast<QVariantMap>(arguments.at(1).value<QDBusArgument>());
|
||||
QStringList keys = changedProps.keys();
|
||||
foreach(const QString &prop, keys) {
|
||||
const QMetaObject* self = metaObject();
|
||||
for (int i=self->propertyOffset(); i < self->propertyCount(); ++i) {
|
||||
QMetaProperty p = self->property(i);
|
||||
if (p.name() == prop) {
|
||||
Q_EMIT p.notifySignal().invoke(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
public:
|
||||
static inline const char *staticInterfaceName()
|
||||
{ return "org.freedesktop.login1.Manager"; }
|
||||
|
||||
public:
|
||||
DBusLogin1Manager(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent = 0);
|
||||
|
||||
~DBusLogin1Manager();
|
||||
|
||||
Q_PROPERTY(QString BlockInhibited READ blockInhibited NOTIFY BlockInhibitedChanged)
|
||||
inline QString blockInhibited() const
|
||||
{ return qvariant_cast< QString >(property("BlockInhibited")); }
|
||||
|
||||
Q_PROPERTY(QString ControlGroupHierarchy READ controlGroupHierarchy)
|
||||
inline QString controlGroupHierarchy() const
|
||||
{ return qvariant_cast< QString >(property("ControlGroupHierarchy")); }
|
||||
|
||||
Q_PROPERTY(QStringList Controllers READ controllers)
|
||||
inline QStringList controllers() const
|
||||
{ return qvariant_cast< QStringList >(property("Controllers")); }
|
||||
|
||||
Q_PROPERTY(QString DelayInhibited READ delayInhibited)
|
||||
inline QString delayInhibited() const
|
||||
{ return qvariant_cast< QString >(property("DelayInhibited")); }
|
||||
|
||||
Q_PROPERTY(QString HandleHibernateKey READ handleHibernateKey)
|
||||
inline QString handleHibernateKey() const
|
||||
{ return qvariant_cast< QString >(property("HandleHibernateKey")); }
|
||||
|
||||
Q_PROPERTY(QString HandleLidSwitch READ handleLidSwitch)
|
||||
inline QString handleLidSwitch() const
|
||||
{ return qvariant_cast< QString >(property("HandleLidSwitch")); }
|
||||
|
||||
Q_PROPERTY(QString HandlePowerKey READ handlePowerKey)
|
||||
inline QString handlePowerKey() const
|
||||
{ return qvariant_cast< QString >(property("HandlePowerKey")); }
|
||||
|
||||
Q_PROPERTY(QString HandleSuspendKey READ handleSuspendKey)
|
||||
inline QString handleSuspendKey() const
|
||||
{ return qvariant_cast< QString >(property("HandleSuspendKey")); }
|
||||
|
||||
Q_PROPERTY(QString IdleAction READ idleAction)
|
||||
inline QString idleAction() const
|
||||
{ return qvariant_cast< QString >(property("IdleAction")); }
|
||||
|
||||
Q_PROPERTY(qulonglong IdleActionUSec READ idleActionUSec)
|
||||
inline qulonglong idleActionUSec() const
|
||||
{ return qvariant_cast< qulonglong >(property("IdleActionUSec")); }
|
||||
|
||||
Q_PROPERTY(bool IdleHint READ idleHint)
|
||||
inline bool idleHint() const
|
||||
{ return qvariant_cast< bool >(property("IdleHint")); }
|
||||
|
||||
Q_PROPERTY(qulonglong IdleSinceHint READ idleSinceHint)
|
||||
inline qulonglong idleSinceHint() const
|
||||
{ return qvariant_cast< qulonglong >(property("IdleSinceHint")); }
|
||||
|
||||
Q_PROPERTY(qulonglong IdleSinceHintMonotonic READ idleSinceHintMonotonic)
|
||||
inline qulonglong idleSinceHintMonotonic() const
|
||||
{ return qvariant_cast< qulonglong >(property("IdleSinceHintMonotonic")); }
|
||||
|
||||
Q_PROPERTY(qulonglong InhibitDelayMaxUSec READ inhibitDelayMaxUSec)
|
||||
inline qulonglong inhibitDelayMaxUSec() const
|
||||
{ return qvariant_cast< qulonglong >(property("InhibitDelayMaxUSec")); }
|
||||
|
||||
Q_PROPERTY(QStringList KillExcludeUsers READ killExcludeUsers)
|
||||
inline QStringList killExcludeUsers() const
|
||||
{ return qvariant_cast< QStringList >(property("KillExcludeUsers")); }
|
||||
|
||||
Q_PROPERTY(QStringList KillOnlyUsers READ killOnlyUsers)
|
||||
inline QStringList killOnlyUsers() const
|
||||
{ return qvariant_cast< QStringList >(property("KillOnlyUsers")); }
|
||||
|
||||
Q_PROPERTY(bool KillUserProcesses READ killUserProcesses)
|
||||
inline bool killUserProcesses() const
|
||||
{ return qvariant_cast< bool >(property("KillUserProcesses")); }
|
||||
|
||||
Q_PROPERTY(uint NAutoVTs READ nAutoVTs)
|
||||
inline uint nAutoVTs() const
|
||||
{ return qvariant_cast< uint >(property("NAutoVTs")); }
|
||||
|
||||
Q_PROPERTY(bool PreparingForShutdown READ preparingForShutdown)
|
||||
inline bool preparingForShutdown() const
|
||||
{ return qvariant_cast< bool >(property("PreparingForShutdown")); }
|
||||
|
||||
Q_PROPERTY(bool PreparingForSleep READ preparingForSleep)
|
||||
inline bool preparingForSleep() const
|
||||
{ return qvariant_cast< bool >(property("PreparingForSleep")); }
|
||||
|
||||
Q_PROPERTY(QStringList ResetControllers READ resetControllers)
|
||||
inline QStringList resetControllers() const
|
||||
{ return qvariant_cast< QStringList >(property("ResetControllers")); }
|
||||
|
||||
public Q_SLOTS: // METHODS
|
||||
inline QDBusPendingReply<> ActivateSession(const QString &id)
|
||||
{
|
||||
QList<QVariant> argumentList;
|
||||
argumentList << QVariant::fromValue(id);
|
||||
return asyncCallWithArgumentList(QLatin1String("ActivateSession"), argumentList);
|
||||
}
|
||||
|
||||
inline QDBusPendingReply<> ActivateSessionOnSeat(const QString &id, const QString &seat)
|
||||
{
|
||||
QList<QVariant> argumentList;
|
||||
argumentList << QVariant::fromValue(id) << QVariant::fromValue(seat);
|
||||
return asyncCallWithArgumentList(QLatin1String("ActivateSessionOnSeat"), argumentList);
|
||||
}
|
||||
|
||||
inline QDBusPendingReply<> AttachDevice(const QString &seat, const QString &sysfs, bool interactive)
|
||||
{
|
||||
QList<QVariant> argumentList;
|
||||
argumentList << QVariant::fromValue(seat) << QVariant::fromValue(sysfs) << QVariant::fromValue(interactive);
|
||||
return asyncCallWithArgumentList(QLatin1String("AttachDevice"), argumentList);
|
||||
}
|
||||
|
||||
inline QDBusPendingReply<QString> CanHibernate()
|
||||
{
|
||||
QList<QVariant> argumentList;
|
||||
return asyncCallWithArgumentList(QLatin1String("CanHibernate"), argumentList);
|
||||
}
|
||||
|
||||
inline QDBusPendingReply<QString> CanHybridSleep()
|
||||
{
|
||||
QList<QVariant> argumentList;
|
||||
return asyncCallWithArgumentList(QLatin1String("CanHybridSleep"), argumentList);
|
||||
}
|
||||
|
||||
inline QDBusPendingReply<QString> CanPowerOff()
|
||||
{
|
||||
QList<QVariant> argumentList;
|
||||
return asyncCallWithArgumentList(QLatin1String("CanPowerOff"), argumentList);
|
||||
}
|
||||
|
||||
inline QDBusPendingReply<QString> CanReboot()
|
||||
{
|
||||
QList<QVariant> argumentList;
|
||||
return asyncCallWithArgumentList(QLatin1String("CanReboot"), argumentList);
|
||||
}
|
||||
|
||||
inline QDBusPendingReply<QString> CanSuspend()
|
||||
{
|
||||
QList<QVariant> argumentList;
|
||||
return asyncCallWithArgumentList(QLatin1String("CanSuspend"), argumentList);
|
||||
}
|
||||
|
||||
// inline QDBusPendingReply<QString, QDBusObjectPath, QDBusObjectPath, QDBusUnixFileDescriptor, QString, uint, bool> CreateSession(uint uid, uint leader, const QString &service, const QString &type, const QString &class, const QString &seat, uint vtnr, const QString &tty, const QString &display, bool remote, const QString &remote_user, const QString &remote_host, const QStringList &controllers, const QStringList &reset_controllers, bool kill_processes)
|
||||
// {
|
||||
// QList<QVariant> argumentList;
|
||||
// argumentList << QVariant::fromValue(uid) << QVariant::fromValue(leader) << QVariant::fromValue(service) << QVariant::fromValue(type) << QVariant::fromValue(class) << QVariant::fromValue(seat) << QVariant::fromValue(vtnr) << QVariant::fromValue(tty) << QVariant::fromValue(display) << QVariant::fromValue(remote) << QVariant::fromValue(remote_user) << QVariant::fromValue(remote_host) << QVariant::fromValue(controllers) << QVariant::fromValue(reset_controllers) << QVariant::fromValue(kill_processes);
|
||||
// return asyncCallWithArgumentList(QLatin1String("CreateSession"), argumentList);
|
||||
// }
|
||||
// inline QDBusReply<QString> CreateSession(uint uid, uint leader, const QString &service, const QString &type, const QString &class, const QString &seat, uint vtnr, const QString &tty, const QString &display, bool remote, const QString &remote_user, const QString &remote_host, const QStringList &controllers, const QStringList &reset_controllers, bool kill_processes, QDBusObjectPath &path, QDBusObjectPath &runtime_path, QDBusUnixFileDescriptor &fd, QString &seat_, uint &vtnr_, bool &existing)
|
||||
// {
|
||||
// QList<QVariant> argumentList;
|
||||
// argumentList << QVariant::fromValue(uid) << QVariant::fromValue(leader) << QVariant::fromValue(service) << QVariant::fromValue(type) << QVariant::fromValue(class) << QVariant::fromValue(seat) << QVariant::fromValue(vtnr) << QVariant::fromValue(tty) << QVariant::fromValue(display) << QVariant::fromValue(remote) << QVariant::fromValue(remote_user) << QVariant::fromValue(remote_host) << QVariant::fromValue(controllers) << QVariant::fromValue(reset_controllers) << QVariant::fromValue(kill_processes);
|
||||
// QDBusMessage reply = callWithArgumentList(QDBus::Block, QLatin1String("CreateSession"), argumentList);
|
||||
// if (reply.type() == QDBusMessage::ReplyMessage && reply.arguments().count() == 7) {
|
||||
// path = qdbus_cast<QDBusObjectPath>(reply.arguments().at(1));
|
||||
// runtime_path = qdbus_cast<QDBusObjectPath>(reply.arguments().at(2));
|
||||
// fd = qdbus_cast<QDBusUnixFileDescriptor>(reply.arguments().at(3));
|
||||
// seat_ = qdbus_cast<QString>(reply.arguments().at(4));
|
||||
// vtnr_ = qdbus_cast<uint>(reply.arguments().at(5));
|
||||
// existing = qdbus_cast<bool>(reply.arguments().at(6));
|
||||
// }
|
||||
// return reply;
|
||||
// }
|
||||
|
||||
inline QDBusPendingReply<> FlushDevices(bool interactive)
|
||||
{
|
||||
QList<QVariant> argumentList;
|
||||
argumentList << QVariant::fromValue(interactive);
|
||||
return asyncCallWithArgumentList(QLatin1String("FlushDevices"), argumentList);
|
||||
}
|
||||
|
||||
inline QDBusPendingReply<QDBusObjectPath> GetSeat(const QString &id)
|
||||
{
|
||||
QList<QVariant> argumentList;
|
||||
argumentList << QVariant::fromValue(id);
|
||||
return asyncCallWithArgumentList(QLatin1String("GetSeat"), argumentList);
|
||||
}
|
||||
|
||||
inline QDBusPendingReply<QDBusObjectPath> GetSession(const QString &id)
|
||||
{
|
||||
QList<QVariant> argumentList;
|
||||
argumentList << QVariant::fromValue(id);
|
||||
return asyncCallWithArgumentList(QLatin1String("GetSession"), argumentList);
|
||||
}
|
||||
|
||||
inline QDBusPendingReply<QDBusObjectPath> GetSessionByPID(uint pid)
|
||||
{
|
||||
QList<QVariant> argumentList;
|
||||
argumentList << QVariant::fromValue(pid);
|
||||
return asyncCallWithArgumentList(QLatin1String("GetSessionByPID"), argumentList);
|
||||
}
|
||||
|
||||
inline QDBusPendingReply<QDBusObjectPath> GetUser(uint uid)
|
||||
{
|
||||
QList<QVariant> argumentList;
|
||||
argumentList << QVariant::fromValue(uid);
|
||||
return asyncCallWithArgumentList(QLatin1String("GetUser"), argumentList);
|
||||
}
|
||||
|
||||
inline QDBusPendingReply<> Hibernate(bool interactive)
|
||||
{
|
||||
QList<QVariant> argumentList;
|
||||
argumentList << QVariant::fromValue(interactive);
|
||||
return asyncCallWithArgumentList(QLatin1String("Hibernate"), argumentList);
|
||||
}
|
||||
|
||||
inline QDBusPendingReply<> HybridSleep(bool interactive)
|
||||
{
|
||||
QList<QVariant> argumentList;
|
||||
argumentList << QVariant::fromValue(interactive);
|
||||
return asyncCallWithArgumentList(QLatin1String("HybridSleep"), argumentList);
|
||||
}
|
||||
|
||||
inline QDBusPendingReply<QDBusUnixFileDescriptor> Inhibit(const QString &what, const QString &who, const QString &why, const QString &mode)
|
||||
{
|
||||
QList<QVariant> argumentList;
|
||||
argumentList << QVariant::fromValue(what) << QVariant::fromValue(who) << QVariant::fromValue(why) << QVariant::fromValue(mode);
|
||||
return asyncCallWithArgumentList(QLatin1String("Inhibit"), argumentList);
|
||||
}
|
||||
|
||||
inline QDBusPendingReply<> KillSession(const QString &id, const QString &who, const QString &signal)
|
||||
{
|
||||
QList<QVariant> argumentList;
|
||||
argumentList << QVariant::fromValue(id) << QVariant::fromValue(who) << QVariant::fromValue(signal);
|
||||
return asyncCallWithArgumentList(QLatin1String("KillSession"), argumentList);
|
||||
}
|
||||
|
||||
inline QDBusPendingReply<> KillUser(uint uid, const QString &signal)
|
||||
{
|
||||
QList<QVariant> argumentList;
|
||||
argumentList << QVariant::fromValue(uid) << QVariant::fromValue(signal);
|
||||
return asyncCallWithArgumentList(QLatin1String("KillUser"), argumentList);
|
||||
}
|
||||
|
||||
inline QDBusPendingReply<> LockSession(const QString &id)
|
||||
{
|
||||
QList<QVariant> argumentList;
|
||||
argumentList << QVariant::fromValue(id);
|
||||
return asyncCallWithArgumentList(QLatin1String("LockSession"), argumentList);
|
||||
}
|
||||
|
||||
inline QDBusPendingReply<> LockSessions()
|
||||
{
|
||||
QList<QVariant> argumentList;
|
||||
return asyncCallWithArgumentList(QLatin1String("LockSessions"), argumentList);
|
||||
}
|
||||
|
||||
inline QDBusPendingReply<> PowerOff(bool interactive)
|
||||
{
|
||||
QList<QVariant> argumentList;
|
||||
argumentList << QVariant::fromValue(interactive);
|
||||
return asyncCallWithArgumentList(QLatin1String("PowerOff"), argumentList);
|
||||
}
|
||||
|
||||
inline QDBusPendingReply<> Reboot(bool interactive)
|
||||
{
|
||||
QList<QVariant> argumentList;
|
||||
argumentList << QVariant::fromValue(interactive);
|
||||
return asyncCallWithArgumentList(QLatin1String("Reboot"), argumentList);
|
||||
}
|
||||
|
||||
inline QDBusPendingReply<> ReleaseSession(const QString &id)
|
||||
{
|
||||
QList<QVariant> argumentList;
|
||||
argumentList << QVariant::fromValue(id);
|
||||
return asyncCallWithArgumentList(QLatin1String("ReleaseSession"), argumentList);
|
||||
}
|
||||
|
||||
inline QDBusPendingReply<> SetUserLinger(uint uid, bool b, bool interactive)
|
||||
{
|
||||
QList<QVariant> argumentList;
|
||||
argumentList << QVariant::fromValue(uid) << QVariant::fromValue(b) << QVariant::fromValue(interactive);
|
||||
return asyncCallWithArgumentList(QLatin1String("SetUserLinger"), argumentList);
|
||||
}
|
||||
|
||||
inline QDBusPendingReply<> Suspend(bool interactive)
|
||||
{
|
||||
QList<QVariant> argumentList;
|
||||
argumentList << QVariant::fromValue(interactive);
|
||||
return asyncCallWithArgumentList(QLatin1String("Suspend"), argumentList);
|
||||
}
|
||||
|
||||
inline QDBusPendingReply<> TerminateSeat(const QString &id)
|
||||
{
|
||||
QList<QVariant> argumentList;
|
||||
argumentList << QVariant::fromValue(id);
|
||||
return asyncCallWithArgumentList(QLatin1String("TerminateSeat"), argumentList);
|
||||
}
|
||||
|
||||
inline QDBusPendingReply<> TerminateSession(const QString &id)
|
||||
{
|
||||
QList<QVariant> argumentList;
|
||||
argumentList << QVariant::fromValue(id);
|
||||
return asyncCallWithArgumentList(QLatin1String("TerminateSession"), argumentList);
|
||||
}
|
||||
|
||||
inline QDBusPendingReply<> TerminateUser(uint uid)
|
||||
{
|
||||
QList<QVariant> argumentList;
|
||||
argumentList << QVariant::fromValue(uid);
|
||||
return asyncCallWithArgumentList(QLatin1String("TerminateUser"), argumentList);
|
||||
}
|
||||
|
||||
inline QDBusPendingReply<> UnlockSession(const QString &id)
|
||||
{
|
||||
QList<QVariant> argumentList;
|
||||
argumentList << QVariant::fromValue(id);
|
||||
return asyncCallWithArgumentList(QLatin1String("UnlockSession"), argumentList);
|
||||
}
|
||||
|
||||
inline QDBusPendingReply<> UnlockSessions()
|
||||
{
|
||||
QList<QVariant> argumentList;
|
||||
return asyncCallWithArgumentList(QLatin1String("UnlockSessions"), argumentList);
|
||||
}
|
||||
|
||||
Q_SIGNALS: // SIGNALS
|
||||
void BlockInhibitedChanged();
|
||||
|
||||
void PrepareForShutdown(bool active);
|
||||
void PrepareForSleep(bool active);
|
||||
void SeatNew(const QString &id, const QDBusObjectPath &path);
|
||||
void SeatRemoved(const QString &id, const QDBusObjectPath &path);
|
||||
void SessionNew(const QString &id, const QDBusObjectPath &path);
|
||||
void SessionRemoved(const QString &id, const QDBusObjectPath &path);
|
||||
void UserNew(uint uid, const QDBusObjectPath &path);
|
||||
void UserRemoved(uint uid, const QDBusObjectPath &path);
|
||||
};
|
||||
|
||||
namespace org {
|
||||
namespace freedesktop {
|
||||
namespace login1 {
|
||||
typedef ::DBusLogin1Manager Manager;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
26
plugins/shutdown/dbus/dbuspowermanager.cpp
Normal file
@ -0,0 +1,26 @@
|
||||
/*
|
||||
* This file was generated by qdbusxml2cpp version 0.8
|
||||
* Command line was: qdbusxml2cpp -c PowerManager -p com_deepin_daemon_powermanager com.deepin.daemon.PowerManager.xml
|
||||
*
|
||||
* qdbusxml2cpp is Copyright (C) 2017 The Qt Company Ltd.
|
||||
*
|
||||
* This is an auto-generated file.
|
||||
* This file may have been hand-edited. Look for HAND-EDIT comments
|
||||
* before re-generating it.
|
||||
*/
|
||||
|
||||
#include "dbuspowermanager.h"
|
||||
|
||||
/*
|
||||
* Implementation of interface class PowerManager
|
||||
*/
|
||||
|
||||
DBusPowerManager::DBusPowerManager(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent)
|
||||
: QDBusAbstractInterface(service, path, staticInterfaceName(), connection, parent)
|
||||
{
|
||||
}
|
||||
|
||||
DBusPowerManager::~DBusPowerManager()
|
||||
{
|
||||
}
|
||||
|
73
plugins/shutdown/dbus/dbuspowermanager.h
Normal file
@ -0,0 +1,73 @@
|
||||
/*
|
||||
* This file was generated by qdbusxml2cpp version 0.8
|
||||
* Command line was: qdbusxml2cpp -c PowerManager -p com_deepin_daemon_powermanager com.deepin.daemon.PowerManager.xml
|
||||
*
|
||||
* qdbusxml2cpp is Copyright (C) 2017 The Qt Company Ltd.
|
||||
*
|
||||
* This is an auto-generated file.
|
||||
* Do not edit! All changes made to it will be lost.
|
||||
*/
|
||||
|
||||
#ifndef COM_DEEPIN_DAEMON_POWERMANAGER_H
|
||||
#define COM_DEEPIN_DAEMON_POWERMANAGER_H
|
||||
|
||||
#include <QtCore/QObject>
|
||||
#include <QtCore/QByteArray>
|
||||
#include <QtCore/QList>
|
||||
#include <QtCore/QMap>
|
||||
#include <QtCore/QString>
|
||||
#include <QtCore/QStringList>
|
||||
#include <QtCore/QVariant>
|
||||
#include <QtDBus/QtDBus>
|
||||
|
||||
/*
|
||||
* Proxy class for interface com.deepin.daemon.PowerManager
|
||||
*/
|
||||
class DBusPowerManager: public QDBusAbstractInterface
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
static inline const char *staticInterfaceName()
|
||||
{ return "com.deepin.daemon.PowerManager"; }
|
||||
|
||||
public:
|
||||
DBusPowerManager(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent = nullptr);
|
||||
|
||||
~DBusPowerManager();
|
||||
|
||||
public Q_SLOTS: // METHODS
|
||||
inline QDBusPendingReply<bool> CanHibernate()
|
||||
{
|
||||
QList<QVariant> argumentList;
|
||||
return asyncCallWithArgumentList(QStringLiteral("CanHibernate"), argumentList);
|
||||
}
|
||||
|
||||
inline QDBusPendingReply<bool> CanReboot()
|
||||
{
|
||||
QList<QVariant> argumentList;
|
||||
return asyncCallWithArgumentList(QStringLiteral("CanReboot"), argumentList);
|
||||
}
|
||||
|
||||
inline QDBusPendingReply<bool> CanShutdown()
|
||||
{
|
||||
QList<QVariant> argumentList;
|
||||
return asyncCallWithArgumentList(QStringLiteral("CanShutdown"), argumentList);
|
||||
}
|
||||
|
||||
inline QDBusPendingReply<bool> CanSuspend()
|
||||
{
|
||||
QList<QVariant> argumentList;
|
||||
return asyncCallWithArgumentList(QStringLiteral("CanSuspend"), argumentList);
|
||||
}
|
||||
|
||||
Q_SIGNALS: // SIGNALS
|
||||
};
|
||||
|
||||
namespace com {
|
||||
namespace deepin {
|
||||
namespace daemon {
|
||||
typedef ::DBusPowerManager PowerManager;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
@ -24,11 +24,14 @@
|
||||
#include "../frame/util/utils.h"
|
||||
#include "../widgets/tipswidget.h"
|
||||
|
||||
#include <DSysInfo>
|
||||
|
||||
#include <QIcon>
|
||||
#include <QSettings>
|
||||
|
||||
#define PLUGIN_STATE_KEY "enable"
|
||||
|
||||
DCORE_USE_NAMESPACE
|
||||
using namespace Dock;
|
||||
|
||||
ShutdownPlugin::ShutdownPlugin(QObject *parent)
|
||||
@ -36,8 +39,7 @@ ShutdownPlugin::ShutdownPlugin(QObject *parent)
|
||||
|
||||
m_pluginLoaded(false),
|
||||
m_tipsLabel(new TipsWidget),
|
||||
m_login1Inter(new DBusLogin1Manager("org.freedesktop.login1", "/org/freedesktop/login1", QDBusConnection::systemBus(), this))
|
||||
|
||||
m_powerManagerInter(new DBusPowerManager("com.deepin.daemon.PowerManager", "/com/deepin/daemon/PowerManager", QDBusConnection::systemBus(), this))
|
||||
{
|
||||
m_tipsLabel->setVisible(false);
|
||||
m_tipsLabel->setAccessibleName("shutdown");
|
||||
@ -127,7 +129,7 @@ const QString ShutdownPlugin::itemContextMenu(const QString &itemKey)
|
||||
QProcessEnvironment enviromentVar = QProcessEnvironment::systemEnvironment();
|
||||
bool can_sleep = enviromentVar.contains("POWER_CAN_SLEEP") ? QVariant(enviromentVar.value("POWER_CAN_SLEEP")).toBool()
|
||||
: valueByQSettings<bool>("Power", "sleep", true) &&
|
||||
m_login1Inter->CanSuspend().value().contains("yes");
|
||||
m_powerManagerInter->CanSuspend();
|
||||
;
|
||||
if (can_sleep) {
|
||||
QMap<QString, QVariant> suspend;
|
||||
@ -138,7 +140,7 @@ const QString ShutdownPlugin::itemContextMenu(const QString &itemKey)
|
||||
}
|
||||
|
||||
bool can_hibernate = enviromentVar.contains("POWER_CAN_HIBERNATE") ? QVariant(enviromentVar.value("POWER_CAN_HIBERNATE")).toBool()
|
||||
: checkSwap() && m_login1Inter->CanHibernate().value().contains("yes");
|
||||
: checkSwap() && m_powerManagerInter->CanHibernate();
|
||||
|
||||
if (can_hibernate) {
|
||||
QMap<QString, QVariant> hibernate;
|
||||
@ -163,7 +165,7 @@ const QString ShutdownPlugin::itemContextMenu(const QString &itemKey)
|
||||
items.push_back(logout);
|
||||
|
||||
if (!QFile::exists(ICBC_CONF_FILE)) {
|
||||
if (DBusAccount().userList().count() > 1) {
|
||||
if (DBusAccount().userList().count() > 1 || DSysInfo::uosType() == DSysInfo::UosType::UosServer) {
|
||||
QMap<QString, QVariant> switchUser;
|
||||
switchUser["itemId"] = "SwitchUser";
|
||||
switchUser["itemText"] = tr("Switch account");
|
||||
|
@ -24,7 +24,7 @@
|
||||
|
||||
#include "pluginsiteminterface.h"
|
||||
#include "shutdownwidget.h"
|
||||
#include "./dbus/dbuslogin1manager.h"
|
||||
#include "./dbus/dbuspowermanager.h"
|
||||
|
||||
#include <QLabel>
|
||||
|
||||
@ -111,7 +111,7 @@ private:
|
||||
|
||||
ShutdownWidget *m_shutdownWidget;
|
||||
Dock::TipsWidget *m_tipsLabel;
|
||||
DBusLogin1Manager* m_login1Inter;
|
||||
DBusPowerManager* m_powerManagerInter;
|
||||
};
|
||||
|
||||
#endif // SHUTDOWNPLUGIN_H
|
||||
|
@ -32,6 +32,7 @@
|
||||
#include <QScrollBar>
|
||||
#include <DApplication>
|
||||
#include <DStandardItem>
|
||||
#include <DFontSizeManager>
|
||||
|
||||
#define WIDTH 260
|
||||
#define MAX_HEIGHT 300
|
||||
@ -147,6 +148,7 @@ void SoundApplet::initUi()
|
||||
|
||||
m_deviceLabel = new TipsWidget;
|
||||
m_deviceLabel->setText(tr("Device"));
|
||||
DFontSizeManager::instance()->bind(m_deviceLabel, DFontSizeManager::T4, QFont::Medium);
|
||||
|
||||
QHBoxLayout *deviceLayout = new QHBoxLayout;
|
||||
deviceLayout->addSpacing(2);
|
||||
|
@ -107,6 +107,7 @@ void FashionTrayItem::trayWidgetAdded(const QString &itemKey, AbstractTrayWidget
|
||||
}
|
||||
} while (false);
|
||||
|
||||
onExpandChanged(m_controlWidget->expanded());
|
||||
requestResize();
|
||||
}
|
||||
|
||||
|
@ -1,18 +1,31 @@
|
||||
%global sname deepin-dock
|
||||
%global repo dde-dock
|
||||
%global __provides_exclude_from ^%{_libdir}/%{repo}/.*\\.so$
|
||||
|
||||
Name: dde-dock
|
||||
Version: 5.1.0.13
|
||||
Release: 1
|
||||
%if 0%{?fedora}
|
||||
%global start_logo start-here
|
||||
Name: %{sname}
|
||||
%else
|
||||
Name: %{repo}
|
||||
%endif
|
||||
Version: 5.3.0.49
|
||||
Release: 1%{?fedora:%dist}
|
||||
Summary: Deepin desktop-environment - Dock module
|
||||
License: GPLv3
|
||||
%if 0%{?fedora}
|
||||
URL: https://github.com/linuxdeepin/dde-dock
|
||||
Source0: %{url}/archive/%{version}/%{repo}-%{version}.tar.gz
|
||||
%else
|
||||
URL: http://shuttle.corp.deepin.com/cache/repos/eagle/release-candidate/RERFNS4wLjAuNjU3NQ/pool/main/d/dde-dock/
|
||||
Source0: %{name}_%{version}.orig.tar.xz
|
||||
Source0: %{name}_%{version}.orig.tar.xz
|
||||
%endif
|
||||
|
||||
BuildRequires: cmake
|
||||
BuildRequires: gcc-c++
|
||||
BuildRequires: pkgconfig(dbusmenu-qt5)
|
||||
BuildRequires: pkgconfig(dde-network-utils)
|
||||
BuildRequires: dtkwidget-devel >= 5.1
|
||||
BuildRequires: dtkgui-devel >= 5.2.2.16
|
||||
BuildRequires: dtkcore-devel >= 5.1
|
||||
BuildRequires: pkgconfig(dframeworkdbus) >= 2.0
|
||||
BuildRequires: pkgconfig(gsettings-qt)
|
||||
@ -31,11 +44,16 @@ BuildRequires: pkgconfig(xcb-icccm)
|
||||
BuildRequires: pkgconfig(xcb-image)
|
||||
BuildRequires: qt5-linguist
|
||||
Requires: dbusmenu-qt5
|
||||
%if 0%{?fedora}
|
||||
BuildRequires: qt5-qtbase-private-devel
|
||||
Requires: deepin-network-utils
|
||||
Requires: deepin-qt-dbus-factory
|
||||
%else
|
||||
Requires: dde-network-utils
|
||||
Requires: dde-qt-dbus-factory
|
||||
%endif
|
||||
Requires: xcb-util-wm
|
||||
Requires: xcb-util-image
|
||||
Requires: libxcb
|
||||
|
||||
%description
|
||||
Deepin desktop-environment - Dock module.
|
||||
@ -55,45 +73,58 @@ Requires: %{name}%{?_isa} = %{version}-%{release}
|
||||
deepin desktop-environment - dock plugin.
|
||||
|
||||
%prep
|
||||
%setup -q -n %{name}-%{version}
|
||||
%autosetup -p1 -n %{repo}-%{version}
|
||||
sed -i '/TARGETS/s|lib|%{_lib}|' plugins/*/CMakeLists.txt \
|
||||
plugins/plugin-guide/plugins-developer-guide.md
|
||||
|
||||
sed -i -E '30,39d' CMakeLists.txt
|
||||
|
||||
sed -i 's|/lib|/%{_lib}|' frame/controller/dockpluginscontroller.cpp \
|
||||
frame/panel/mainpanelcontrol.cpp \
|
||||
plugins/tray/system-trays/systemtrayscontroller.cpp
|
||||
|
||||
|
||||
sed -i 's|/lib|/libexec|g' plugins/show-desktop/showdesktopplugin.cpp
|
||||
sed -i 's|/lib|/libexec|g' plugins/show-desktop/showdesktopplugin.cpp \
|
||||
frame/panel/mainpanelcontrol.cpp
|
||||
|
||||
sed -i 's:libdir.*:libdir=%{_libdir}:' dde-dock.pc.in
|
||||
|
||||
sed -i 's|/usr/lib/dde-dock/plugins|%{_libdir}/dde-dock/plugins|' plugins/plugin-guide/plugins-developer-guide.md
|
||||
sed -i 's|local/lib/dde-dock/plugins|local/%{_lib}/dde-dock/plugins|' plugins/plugin-guide/plugins-developer-guide.md
|
||||
|
||||
%if 0%{?fedora}
|
||||
# set icon to Fedora logo
|
||||
sed -i 's|deepin-launcher|%{start_logo}|' frame/item/launcheritem.cpp
|
||||
%endif
|
||||
|
||||
%build
|
||||
export PATH=%{_qt5_bindir}:$PATH
|
||||
%if 0%{?fedora}
|
||||
%cmake -DCMAKE_INSTALL_PREFIX=%{_prefix} -DARCHITECTURE=%{_arch}
|
||||
%cmake_build
|
||||
%else
|
||||
%cmake -DCMAKE_INSTALL_PREFIX=%{_prefix} -DARCHITECTURE=%{_arch} .
|
||||
%make_build
|
||||
%endif
|
||||
|
||||
%install
|
||||
%if 0%{?fedora}
|
||||
%cmake_install
|
||||
%else
|
||||
%make_install INSTALL_ROOT=%{buildroot}
|
||||
|
||||
%ldconfig_scriptlets
|
||||
%endif
|
||||
|
||||
%files
|
||||
%license LICENSE
|
||||
%{_sysconfdir}/%{name}/indicator/keybord_layout.json
|
||||
%{_bindir}/%{name}
|
||||
%{_libdir}/%{name}/
|
||||
%{_datadir}/%{name}/
|
||||
%{_datadir}/dbus-1/services/*.service
|
||||
%{_sysconfdir}/%{repo}/
|
||||
%{_bindir}/%{repo}
|
||||
%{_libdir}/%{repo}/
|
||||
%{_datadir}/%{repo}/
|
||||
%{_datarootdir}/glib-2.0/schemas/com.deepin.dde.dock.module.gschema.xml
|
||||
%{_datarootdir}/polkit-1/actions/com.deepin.dde.dock.overlay.policy
|
||||
|
||||
%files devel
|
||||
%{_includedir}/%{name}/
|
||||
%{_libdir}/pkgconfig/%{name}.pc
|
||||
%doc plugins/plugin-guide
|
||||
%{_includedir}/%{repo}/
|
||||
%{_libdir}/pkgconfig/%{repo}.pc
|
||||
%{_libdir}/cmake/DdeDock/DdeDockConfig.cmake
|
||||
|
||||
%files onboard-plugin
|
||||
|
@ -8,9 +8,13 @@ set(CMAKE_AUTOMOC ON)
|
||||
# 源文件
|
||||
file(GLOB_RECURSE SRCS "*.h" "*.cpp")
|
||||
|
||||
# 用于测试覆盖率的编译条件
|
||||
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-arcs -ftest-coverage -lgcov")
|
||||
|
||||
# 查找依赖库
|
||||
find_package(PkgConfig REQUIRED)
|
||||
find_package(Qt5 COMPONENTS Test DBus REQUIRED)
|
||||
find_package(Qt5 COMPONENTS Widgets Test DBus REQUIRED)
|
||||
find_package(GTest REQUIRED)
|
||||
|
||||
pkg_check_modules(DFrameworkDBus REQUIRED dframeworkdbus)
|
||||
pkg_check_modules(QGSettings REQUIRED gsettings-qt)
|
||||
@ -27,4 +31,8 @@ target_link_libraries(${BIN_NAME} PRIVATE
|
||||
${Qt5DBus_LIBRARIES}
|
||||
${DFrameworkDBus_LIBRARIES}
|
||||
${QGSettings_LIBRARIES}
|
||||
${Qt5Widgets_LIBRARIES}
|
||||
${GTEST_LIBRARIES}
|
||||
-lpthread
|
||||
-lm
|
||||
)
|
||||
|
@ -35,16 +35,20 @@
|
||||
#define SLEEP1 QThread::sleep(1);
|
||||
|
||||
DockUnitTest::DockUnitTest()
|
||||
: m_dockInter(new QDBusInterface("com.deepin.dde.Dock", "/com/deepin/dde/Dock", "org.freedesktop.DBus.Properties"))
|
||||
, m_daemonDockInter(new DBusDock("com.deepin.dde.daemon.Dock", "/com/deepin/dde/daemon/Dock", QDBusConnection::sessionBus(), this))
|
||||
{
|
||||
qDBusRegisterMetaType<ScreenRect>();
|
||||
}
|
||||
|
||||
DockUnitTest::~DockUnitTest()
|
||||
{
|
||||
delete m_dockInter;
|
||||
delete m_daemonDockInter;
|
||||
}
|
||||
|
||||
void DockUnitTest::SetUp()
|
||||
{
|
||||
}
|
||||
|
||||
void DockUnitTest::TearDown()
|
||||
{
|
||||
}
|
||||
|
||||
const DockRect DockUnitTest::dockGeometry()
|
||||
@ -72,7 +76,8 @@ const DockRect DockUnitTest::frontendWindowRect()
|
||||
|
||||
void DockUnitTest::setPosition(Dock::Position pos)
|
||||
{
|
||||
m_daemonDockInter->setPosition(pos);
|
||||
DBusDock daemonDockInter("com.deepin.dde.daemon.Dock", "/com/deepin/dde/daemon/Dock", QDBusConnection::sessionBus(), this);
|
||||
daemonDockInter.setPosition(pos);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -83,31 +88,31 @@ void DockUnitTest::setPosition(Dock::Position pos)
|
||||
* 2.任务栏默认显示状态。
|
||||
* 3.任务栏默认位置。
|
||||
*/
|
||||
void DockUnitTest::dock_defaultGsettings_check()
|
||||
TEST_F(DockUnitTest, dock_defaultGsettings_check)
|
||||
{
|
||||
QGSettings setting("com.deepin.dde.dock", "/com/deepin/dde/dock/");
|
||||
|
||||
if (setting.keys().contains("displayMode")) {
|
||||
QString currentDisplayMode = setting.get("display-mode").toString();
|
||||
QString defaultDisplayMode = "efficient";
|
||||
QCOMPARE(currentDisplayMode, defaultDisplayMode);
|
||||
ASSERT_EQ(currentDisplayMode, defaultDisplayMode);
|
||||
}
|
||||
if (setting.keys().contains("hideMode")) {
|
||||
QString currentHideMode = setting.get("hide-mode").toString();
|
||||
QString defaultHideMode = "keep-showing";
|
||||
QCOMPARE(currentHideMode, defaultHideMode);
|
||||
ASSERT_EQ(currentHideMode, defaultHideMode);
|
||||
}
|
||||
if (setting.keys().contains("position")) {
|
||||
QString currentPosition = setting.get("position").toString();
|
||||
QString defaultPosition = "bottom";
|
||||
QCOMPARE(currentPosition, defaultPosition);
|
||||
ASSERT_EQ(currentPosition, defaultPosition);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief DockUnitTest::dock_geometry_test 比较任务栏自身的位置和通知给后端的位置是否吻合
|
||||
*/
|
||||
void DockUnitTest::dock_geometry_check()
|
||||
TEST_F(DockUnitTest, dock_geometry_check)
|
||||
{
|
||||
ScreenRect daemonDockRect, dockRect;
|
||||
|
||||
@ -141,12 +146,12 @@ void DockUnitTest::dock_geometry_check()
|
||||
qDebug() << dockRect;
|
||||
}
|
||||
|
||||
QCOMPARE(daemonDockRect, dockRect);
|
||||
ASSERT_EQ(daemonDockRect, dockRect);
|
||||
}
|
||||
/**
|
||||
* @brief DockUnitTest::dock_position_check 比较Dbus和QGSettings获取的坐标信息是否一致
|
||||
*/
|
||||
void DockUnitTest::dock_position_check()
|
||||
TEST_F(DockUnitTest, dock_position_check)
|
||||
{
|
||||
DBusDock *dockInter = new DBusDock("com.deepin.dde.daemon.Dock", "/com/deepin/dde/daemon/Dock", QDBusConnection::sessionBus(), this);
|
||||
int nPos = dockInter->position();
|
||||
@ -173,13 +178,13 @@ void DockUnitTest::dock_position_check()
|
||||
QGSettings *setting = new QGSettings("com.deepin.dde.dock");
|
||||
if (setting->keys().contains("position")) {
|
||||
qDebug() << setting->get("position");
|
||||
QCOMPARE(postion,setting->get("position").toString());
|
||||
ASSERT_EQ(postion, setting->get("position").toString());
|
||||
}
|
||||
}
|
||||
/**
|
||||
* @brief DockUnitTest::dock_displayMode_check 比较Dbus和QGSettings获取的显示模式是否一致
|
||||
*/
|
||||
void DockUnitTest::dock_displayMode_check()
|
||||
TEST_F(DockUnitTest, dock_displayMode_check)
|
||||
{
|
||||
DBusDock *dockInter = new DBusDock("com.deepin.dde.daemon.Dock", "/com/deepin/dde/daemon/Dock", QDBusConnection::sessionBus(), this);
|
||||
int nMode = dockInter->displayMode();
|
||||
@ -203,11 +208,11 @@ void DockUnitTest::dock_displayMode_check()
|
||||
QGSettings *setting = new QGSettings("com.deepin.dde.dock");
|
||||
if (setting->keys().contains("displayMode")) {
|
||||
qDebug() << setting->get("displayMode");
|
||||
QCOMPARE(displayMode,setting->get("displayMode").toString());
|
||||
ASSERT_EQ(displayMode, setting->get("displayMode").toString());
|
||||
}
|
||||
}
|
||||
|
||||
void DockUnitTest::dock_appItemCount_check()
|
||||
TEST_F(DockUnitTest, dock_appItemCount_check)
|
||||
{
|
||||
DBusDock *dockInter = new DBusDock("com.deepin.dde.daemon.Dock", "/com/deepin/dde/daemon/Dock", QDBusConnection::sessionBus(), this);
|
||||
qDebug() << dockInter->entries().size();
|
||||
@ -224,36 +229,36 @@ void DockUnitTest::dock_appItemCount_check()
|
||||
* 可测出问题:任务栏在5.3.0.2版本时,开启缩放后,启动器打开时位置和任务栏有重叠,5.3.0.5版本修复了这个问题
|
||||
* 对应Bug: https://pms.uniontech.com/zentao/bug-view-42095.html
|
||||
*/
|
||||
void DockUnitTest::dock_frontWindowRect_check()
|
||||
TEST_F(DockUnitTest, dock_frontWindowRect_check)
|
||||
{
|
||||
setPosition(Dock::Position::Top);
|
||||
SLEEP1;
|
||||
QVERIFY(dockGeometry() == frontendWindowRect());
|
||||
ASSERT_EQ(dockGeometry(), frontendWindowRect());
|
||||
|
||||
setPosition(Dock::Position::Right);
|
||||
SLEEP1;
|
||||
QVERIFY(dockGeometry() == frontendWindowRect());
|
||||
ASSERT_EQ(dockGeometry(), frontendWindowRect());
|
||||
|
||||
setPosition(Dock::Position::Bottom);
|
||||
SLEEP1;
|
||||
QVERIFY(dockGeometry() == frontendWindowRect());
|
||||
ASSERT_EQ(dockGeometry(), frontendWindowRect());
|
||||
|
||||
setPosition(Dock::Position::Left);
|
||||
SLEEP1;
|
||||
QVERIFY(dockGeometry() == frontendWindowRect());
|
||||
ASSERT_EQ(dockGeometry(), frontendWindowRect());
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief DockUnitTest::dock_multi_process
|
||||
* 检查dde-dock是否在没进程存在时能否正常启动,在已有dde-dock进程存在时能否正常退出
|
||||
*/
|
||||
void DockUnitTest::dock_multi_process()
|
||||
TEST_F(DockUnitTest, dock_multi_process)
|
||||
{
|
||||
QProcess *dockProc = new QProcess();
|
||||
dockProc->start("dde-dock");
|
||||
connect(dockProc, static_cast<void (QProcess::*)(int, QProcess::ExitStatus)>(&QProcess::finished), this, [=](int exitCode, QProcess::ExitStatus exitStatus) {
|
||||
QCOMPARE(exitCode, 255);
|
||||
QCOMPARE(exitStatus, QProcess::ExitStatus::NormalExit);
|
||||
ASSERT_EQ(exitCode, 255);
|
||||
ASSERT_EQ(exitStatus, QProcess::ExitStatus::NormalExit);
|
||||
});
|
||||
connect(dockProc, &QProcess::errorOccurred, this, [=](QProcess::ProcessError error) {
|
||||
qDebug() << "dde-dock error occurred: " << error;
|
||||
@ -270,7 +275,7 @@ void DockUnitTest::dock_multi_process()
|
||||
* 运行此用例时需满足用户未手动修改过声音值这一条件,才能保证得到的是默认值,测试才能通过
|
||||
* 所以最好在新创建的用户,或者是新装的系统时进行测试
|
||||
*/
|
||||
void DockUnitTest::dock_defaultVolume_Check(float defaultVolume)
|
||||
TEST_F(DockUnitTest, dock_defaultVolume_Check)
|
||||
{
|
||||
float volume = 0;
|
||||
QDBusInterface audioInterface("com.deepin.daemon.Audio", "/com/deepin/daemon/Audio", "com.deepin.daemon.Audio", QDBusConnection::sessionBus(), this);
|
||||
@ -282,14 +287,14 @@ void DockUnitTest::dock_defaultVolume_Check(float defaultVolume)
|
||||
QDBusInterface sinkInterface("com.deepin.daemon.Audio", defaultPath.path(), "com.deepin.daemon.Audio.Sink", QDBusConnection::sessionBus(), this);
|
||||
volume = sinkInterface.property("Volume").toFloat() * 100.0f;
|
||||
}
|
||||
QCOMPARE(volume, defaultVolume);
|
||||
ASSERT_EQ(volume, 50.0f);
|
||||
}
|
||||
/**
|
||||
* @brief DockUnitTest::dock_coreDump_check
|
||||
* 间隔一段时间判断dock是不是同一个pid,判断是否一直在崩溃
|
||||
*
|
||||
*/
|
||||
void DockUnitTest::dock_coreDump_check()
|
||||
TEST_F(DockUnitTest, dock_coreDump_check)
|
||||
{
|
||||
auto process = new QProcess();
|
||||
process->start("pidof -s dde-dock");
|
||||
@ -304,7 +309,7 @@ void DockUnitTest::dock_coreDump_check()
|
||||
QByteArray pid2 = process->readAllStandardOutput();
|
||||
process->close();
|
||||
|
||||
QCOMPARE(pid,pid2);
|
||||
ASSERT_EQ(pid, pid2);
|
||||
|
||||
delete process;
|
||||
}
|
||||
@ -313,20 +318,20 @@ void DockUnitTest::dock_coreDump_check()
|
||||
* @brief DockUnitTest::dock_appIconSize_check
|
||||
* 判断dbus和gsettings获取的任务栏图标大小是否一致
|
||||
*/
|
||||
void DockUnitTest::dock_appIconSize_check()
|
||||
TEST_F(DockUnitTest, dock_appIconSize_check)
|
||||
{
|
||||
DBusDock *dockInter = new DBusDock("com.deepin.dde.daemon.Dock", "/com/deepin/dde/daemon/Dock", QDBusConnection::sessionBus(), this);
|
||||
QGSettings *setting = new QGSettings("com.deepin.dde.dock");
|
||||
unsigned int iconSize = dockInter->iconSize();
|
||||
qDebug() << "Please check the size of icons:" << iconSize;
|
||||
QCOMPARE(iconSize, setting->get("icon-size").toUInt());
|
||||
ASSERT_EQ(iconSize, setting->get("icon-size").toUInt());
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief dock_appDockUndock_check
|
||||
* 取靠近启动器的应用区域的第一个应用,先 undock ,然后 dock 进行检测
|
||||
*/
|
||||
void DockUnitTest::dock_appDockUndock_check()
|
||||
TEST_F(DockUnitTest, dock_appDockUndock_check)
|
||||
{
|
||||
const QString service_name = "com.deepin.dde.daemon.Dock";
|
||||
const QString dock_path = "/com/deepin/dde/daemon/Dock";
|
||||
@ -346,8 +351,8 @@ void DockUnitTest::dock_appDockUndock_check()
|
||||
const QString appDockPath = appEntries[appIndex].path();
|
||||
|
||||
// get DesktopFile
|
||||
QDBusInterface appPropertyInter(service_name,appDockPath, "org.freedesktop.DBus.Properties", QDBusConnection::sessionBus(), this);
|
||||
QDBusInterface appSlotInter(service_name,appDockPath, "com.deepin.dde.daemon.Dock.Entry", QDBusConnection::sessionBus(), this);
|
||||
QDBusInterface appPropertyInter(service_name, appDockPath, "org.freedesktop.DBus.Properties", QDBusConnection::sessionBus(), this);
|
||||
QDBusInterface appSlotInter(service_name, appDockPath, "com.deepin.dde.daemon.Dock.Entry", QDBusConnection::sessionBus(), this);
|
||||
|
||||
QDBusReply<QVariant> replyDesktopFile = appPropertyInter.call("Get", "com.deepin.dde.daemon.Dock.Entry", "DesktopFile");
|
||||
QString desktopFile = QVariant(replyDesktopFile).toString(); // desktopFile
|
||||
@ -361,14 +366,14 @@ void DockUnitTest::dock_appDockUndock_check()
|
||||
|
||||
// check if app still dock
|
||||
appDesktopFiles=dockInter.GetDockedAppsDesktopFiles();
|
||||
QCOMPARE(appDesktopFiles.contains(desktopFile), false);
|
||||
ASSERT_EQ(appDesktopFiles.contains(desktopFile), false);
|
||||
|
||||
// dock app
|
||||
dockInter.RequestDock(desktopFile, appIndex);
|
||||
QThread::msleep(100); // must
|
||||
|
||||
// check if app is docked
|
||||
QCOMPARE(dockInter.IsDocked(desktopFile), true);
|
||||
ASSERT_EQ(dockInter.IsDocked(desktopFile), true);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -376,7 +381,7 @@ void DockUnitTest::dock_appDockUndock_check()
|
||||
* 检查智能模式时,切换任务栏显示模式,任务栏状态
|
||||
* 可以检测桌面无窗口,切换为智能隐藏模式后任务栏隐藏问题 41907
|
||||
*/
|
||||
void DockUnitTest::dock_switchModeState_check()
|
||||
TEST_F(DockUnitTest, dock_switchModeState_check)
|
||||
{
|
||||
QProcess process;
|
||||
process.start("/usr/lib/deepin-daemon/desktop-toggle");
|
||||
@ -386,17 +391,14 @@ void DockUnitTest::dock_switchModeState_check()
|
||||
return;
|
||||
}
|
||||
|
||||
m_daemonDockInter->setSync(true);
|
||||
m_daemonDockInter->setHideMode(Dock::HideMode::SmartHide);
|
||||
m_daemonDockInter->setDisplayMode(Dock::DisplayMode::Fashion);
|
||||
m_daemonDockInter->setDisplayMode(Dock::DisplayMode::Efficient);
|
||||
DBusDock daemonDockInter("com.deepin.dde.daemon.Dock", "/com/deepin/dde/daemon/Dock", QDBusConnection::sessionBus(), this);
|
||||
daemonDockInter.setSync(true);
|
||||
daemonDockInter.setHideMode(Dock::HideMode::SmartHide);
|
||||
daemonDockInter.setDisplayMode(Dock::DisplayMode::Fashion);
|
||||
daemonDockInter.setDisplayMode(Dock::DisplayMode::Efficient);
|
||||
|
||||
QThread::sleep(2);
|
||||
int state = m_daemonDockInter->hideState();
|
||||
int state = daemonDockInter.hideState();
|
||||
|
||||
QCOMPARE(state, Dock::HideState::Show);
|
||||
ASSERT_EQ(state, Dock::HideState::Show);
|
||||
}
|
||||
|
||||
QTEST_APPLESS_MAIN(DockUnitTest)
|
||||
|
||||
#include "dock_unit_test.moc"
|
||||
|
@ -26,38 +26,24 @@
|
||||
|
||||
#include "../interfaces/constants.h"
|
||||
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
using DBusDock = com::deepin::dde::daemon::Dock;
|
||||
|
||||
class DockUnitTest : public QObject
|
||||
class DockUnitTest : public QObject, public ::testing::Test
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
DockUnitTest();
|
||||
~DockUnitTest();
|
||||
virtual ~DockUnitTest();
|
||||
virtual void SetUp();
|
||||
virtual void TearDown();
|
||||
|
||||
private:
|
||||
QDBusInterface *m_dockInter;
|
||||
DBusDock *m_daemonDockInter;
|
||||
|
||||
private:
|
||||
public:
|
||||
const DockRect dockGeometry(); // 获取任务栏实际位置
|
||||
const DockRect frontendWindowRect(); // 后端记录的任务栏前端界面位置(和实际位置不一定对应)
|
||||
void setPosition(Dock::Position pos);
|
||||
|
||||
private slots:
|
||||
void dock_defaultGsettings_check(); // 默认配置项检查
|
||||
void dock_geometry_check(); // 显示区域
|
||||
void dock_position_check(); // 位置检查
|
||||
void dock_displayMode_check(); // 显示模式检查
|
||||
void dock_appItemCount_check(); // 应用显示数量检查
|
||||
void dock_defaultVolume_Check(float defaultVolume = 50.0f); // 设备默认音量检查
|
||||
void dock_frontWindowRect_check(); // 检查FrontendWindowRect接口数据是否正确
|
||||
void dock_multi_process(); // 检查是否正常启动
|
||||
void dock_coreDump_check(); // dock是否一直崩溃
|
||||
void dock_appIconSize_check(); // 图标大小检查
|
||||
void dock_appDockUndock_check(); // 任务栏上的应用移除和加载检测
|
||||
void dock_switchModeState_check(); // 显示桌面智能隐藏时切换任务栏模式,检查任务栏状态
|
||||
};
|
||||
|
||||
#endif // DOCK_UNIT_TEST_H
|
||||
|
11
unittest/main.cpp
Normal file
@ -0,0 +1,11 @@
|
||||
#include <QApplication>
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
QApplication app(argc, argv);
|
||||
|
||||
testing::InitGoogleTest(&argc, argv);
|
||||
|
||||
return RUN_ALL_TESTS();
|
||||
}
|