Skip to content

Commit 8f21399

Browse files
wangfeideepin-bot[bot]
authored andcommitted
chore: add the dde-clipboard plugin
add the dde-clipboard plugin Log:
1 parent d7dc745 commit 8f21399

23 files changed

+1099
-19
lines changed

CMakeLists.txt

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ endif ()
3939
find_package(PkgConfig REQUIRED)
4040
find_package(Dtk COMPONENTS Widget Core REQUIRED)
4141
find_package(Qt5 COMPONENTS Core Gui Widgets DBus Test Concurrent REQUIRED)
42+
find_package(DdeTrayLoader REQUIRED)
4243

4344
find_package(ECM REQUIRED NO_MODULE)
4445
set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH})
@@ -246,3 +247,38 @@ target_link_libraries(${UT_BIN_NAME} PRIVATE
246247
-lgcov
247248
-lgtest
248249
)
250+
251+
#--------------------------dock-plugin---------------------------
252+
set(PLUGIN_NAME dock-clipboard-plugin)
253+
254+
file(GLOB_RECURSE SRCS
255+
"dock-clipboard-plugin/*.h"
256+
"dock-clipboard-plugin/*.cpp"
257+
"dock-clipboard-plugin/widget/*.h"
258+
"dock-clipboard-plugin/widget/*.cpp"
259+
)
260+
261+
add_definitions("${QT_DEFINITIONS} -DQT_PLUGIN")
262+
add_library(${PLUGIN_NAME} SHARED ${SRCS} dock-clipboard-plugin/resources/clipboard.qrc)
263+
target_include_directories(${PLUGIN_NAME} PUBLIC
264+
${DtkWidget_INCLUDE_DIRS}
265+
${DtkCore_INCLUDE_DIRS}
266+
${OBJECT_BINARY_DIR}
267+
${DDE_DOCK_INCLUDE_DIR}
268+
${QGSettings_INCLUDE_DIRS}
269+
${DFrameworkDBus_INCLUDE_DIRS}
270+
dock-clipboard-plugin/widget/
271+
)
272+
target_link_libraries(${PLUGIN_NAME} PRIVATE
273+
${DtkWidget_LIBRARIES}
274+
${QGSettings_LIBRARIES}
275+
${DFrameworkDBus_LIBRARIES}
276+
${Qt5DBus_LIBRARIES}
277+
${Qt5Widgets_LIBRARIES}
278+
${Qt5Svg_LIBRARIES}
279+
${DtkCore_LIBRARIES}
280+
)
281+
282+
# 设置执行 make install 时哪个目标应该被 install 到哪个位置
283+
install(TARGETS ${PLUGIN_NAME} LIBRARY DESTINATION lib/dde-dock/plugins)
284+
install(FILES "dock-clipboard-plugin/resources/clipboard.svg" DESTINATION share/dde-dock/icons/dcc-setting)

dde-clipboard/dbus/iteminfo.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
#include <QDateTime>
99
#include <QUrl>
1010

11-
#include "constants.h"
11+
#include "dde-clipboard/constants.h"
1212

1313
enum DataType {
1414
Unknown,

debian/control

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ Build-Depends: debhelper (>= 8.0.0),
1616
extra-cmake-modules,
1717
libdwayland-dev,
1818
libkf5wayland-dev,
19-
systemd
19+
systemd,
20+
dde-tray-loader-dev (>= 0.0.11)
2021
Standards-Version: 3.9.5
2122
Homepage: https://github.com/linuxdeepin/dde-clipboard
2223

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"api": "2.0.0"
3+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
// SPDX-FileCopyrightText: 2019 - 2023 UnionTech Software Technology Co., Ltd.
2+
//
3+
// SPDX-License-Identifier: LGPL-3.0-or-later
4+
5+
#ifndef CLIPBOARDCONTROLLER_H
6+
#define CLIPBOARDCONTROLLER_H
7+
8+
#include <DSingleton>
9+
10+
#include <QDBusInterface>
11+
#include <QObject>
12+
13+
class ClipboardController : public QObject, public Dtk::Core::DSingleton<ClipboardController>
14+
{
15+
friend Dtk::Core::DSingleton<ClipboardController>;
16+
17+
Q_OBJECT
18+
public:
19+
ClipboardController()
20+
{
21+
}
22+
23+
~ClipboardController() { }
24+
25+
void toggle()
26+
{
27+
QDBusInterface interface("org.deepin.dde.Clipboard1",
28+
"/org/deepin/dde/Clipboard1",
29+
"org.deepin.dde.Clipboard1",
30+
QDBusConnection::sessionBus());
31+
if (interface.isValid()) {
32+
interface.call("Toggle");
33+
}
34+
}
35+
};
36+
37+
#endif
Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
// SPDX-FileCopyrightText: 2020 - 2022 UnionTech Software Technology Co., Ltd.
2+
//
3+
// SPDX-License-Identifier: LGPL-3.0-or-later
4+
5+
#include "clipboarditem.h"
6+
#include "constants.h"
7+
#include "clipboardcontroller.h"
8+
9+
#include <DDBusSender>
10+
#include <DGuiApplicationHelper>
11+
12+
#include <QDBusConnection>
13+
#include <QIcon>
14+
#include <QJsonDocument>
15+
#include <QPainter>
16+
#include <QVBoxLayout>
17+
#include <QMouseEvent>
18+
19+
DGUI_USE_NAMESPACE
20+
21+
#define SHIFT "shift"
22+
23+
ClipboardItem::ClipboardItem(QWidget* parent)
24+
: QWidget(parent)
25+
, m_tipsLabel(new TipsWidget(this))
26+
, m_icon(new CommonIconButton(this))
27+
{
28+
init();
29+
}
30+
31+
void ClipboardItem::init()
32+
{
33+
m_tipsLabel->setVisible(false);
34+
m_tipsLabel->setText(tr("Clipboard"));
35+
36+
m_icon->setFixedSize(Dock::DOCK_PLUGIN_ITEM_FIXED_SIZE);
37+
m_icon->setIcon(QIcon::fromTheme("clipboard"));
38+
m_icon->setClickable(true);
39+
40+
auto vLayout = new QVBoxLayout(this);
41+
vLayout->setSpacing(0);
42+
vLayout->setMargin(0);
43+
vLayout->addWidget(m_icon, 0, Qt::AlignCenter);
44+
45+
refreshIcon();
46+
47+
connect(DGuiApplicationHelper::instance(), &DGuiApplicationHelper::themeTypeChanged, this, &ClipboardItem::refreshIcon);
48+
connect(m_icon, &CommonIconButton::clicked, this, [] {
49+
ClipboardController::ref().toggle();
50+
});
51+
}
52+
53+
QWidget* ClipboardItem::tipsWidget()
54+
{
55+
return m_tipsLabel;
56+
}
57+
58+
const QString ClipboardItem::contextMenu() const
59+
{
60+
QList<QVariant> items;
61+
items.reserve(1);
62+
63+
QMap<QString, QVariant> shift;
64+
shift["itemId"] = SHIFT;
65+
shift["itemText"] = tr("Open");
66+
shift["isActive"] = true;
67+
items.push_back(shift);
68+
69+
QMap<QString, QVariant> menu;
70+
menu["items"] = items;
71+
menu["checkableMenu"] = false;
72+
menu["singleCheck"] = false;
73+
74+
return QJsonDocument::fromVariant(menu).toJson();
75+
}
76+
77+
void ClipboardItem::invokeMenuItem(const QString menuId, const bool checked)
78+
{
79+
Q_UNUSED(menuId);
80+
Q_UNUSED(checked);
81+
82+
if (menuId == SHIFT) {
83+
ClipboardController::ref().toggle();
84+
Q_EMIT requestHideApplet();
85+
}
86+
}
87+
88+
void ClipboardItem::refreshIcon()
89+
{
90+
m_icon->setState(CommonIconButton::Default);
91+
}
92+
93+
void ClipboardItem::resizeEvent(QResizeEvent* e)
94+
{
95+
QWidget::resizeEvent(e);
96+
97+
const Dock::Position position = qApp->property(PROP_POSITION).value<Dock::Position>();
98+
if (position == Dock::Bottom || position == Dock::Top) {
99+
setMaximumWidth(height());
100+
setMaximumHeight(QWIDGETSIZE_MAX);
101+
} else {
102+
setMaximumHeight(width());
103+
setMaximumWidth(QWIDGETSIZE_MAX);
104+
}
105+
106+
refreshIcon();
107+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
// SPDX-FileCopyrightText: 2020 - 2022 UnionTech Software Technology Co., Ltd.
2+
//
3+
// SPDX-License-Identifier: LGPL-3.0-or-later
4+
5+
#ifndef CLIPBOARDITEM_H
6+
#define CLIPBOARDITEM_H
7+
8+
#include "commoniconbutton.h"
9+
#include "widget/tipswidget.h"
10+
11+
#include <QWidget>
12+
13+
class ClipboardItem : public QWidget
14+
{
15+
Q_OBJECT
16+
17+
public:
18+
explicit ClipboardItem(QWidget *parent = nullptr);
19+
20+
QWidget *tipsWidget();
21+
const QString contextMenu() const;
22+
void invokeMenuItem(const QString menuId, const bool checked);
23+
void refreshIcon();
24+
25+
protected:
26+
void resizeEvent(QResizeEvent *e) override;
27+
28+
signals:
29+
void requestHideApplet();
30+
31+
private:
32+
void init();
33+
34+
private:
35+
TipsWidget *m_tipsLabel;
36+
CommonIconButton *m_icon;
37+
QPixmap m_iconPixmap;
38+
};
39+
40+
#endif // CLIPBOARDITEM_H

0 commit comments

Comments
 (0)