///
/// \brief init
/// init your plugins, you need to save proxyInter to m_proxyInter
/// member variable. but you shouldn't free this pointer.
/// \param proxyInter
/// DON'T try to delete this pointer.
///
virtual void init(PluginProxyInterface *proxyInter) = 0;
Easy_Desktop26.2.12更新
1.新增插件窗口
插件为dde-dock插件.编写指导:https://github.com/linuxdeepin/dde-dock/blob/master/plugins/plugin-guide/plugins-developer-guide.md
dde-dock插件接收器的写法放在文末
对于某些插件Easy_Desktop无法读取,如libtray.so. //我已经没招了,也不知道哪里冒出来的空指针
载入时的报错信息 与 debug得到的汇编码 如下:
2.调色盘:用于调整右键菜单的颜色
3.树状视图外观
4.命令行控制服务更新
-config, -C <路径>-workspace, -WS <索引号>-dbus_id, -D_I-always_refresh, -A_R <布尔值>-Geometry, -G-always_refresh自动为 false)-send_dbus, -S_D <方法> [参数]saveloadexitconfig <路径>workspace <索引>geometry <值>x y width height(禁用自动刷新)true/false(设置自动刷新开关)volume_slider <数值>position_slider <数值>speed_slider <数值>set_wallpaperremove_wallpaperadd_wallpaper [参数]./Easy_Desktop -G 0 0 1440 900./Easy_Desktop -S_D 0 add_wallpaper 0 deepin true /usr/share/wallpapers/deepin/Deepin-Technology-Brand-Logo.jpg Scale_Type::Full true true 0.1 0.1 0 0 true5.动态壁纸中的播放进度会被存档
6.安装方法
1.安装依赖
tips:Easy_Desktop运行依赖libqt5charts5
安装依赖指令:
2.安装本体
https://github.com/3084793958/Easy_Desktop/releases/download/26.2.12/Easy_Desktop
记得储存,Easy_Desktop不会帮你储存(/tmp那个是用来备份的)
重新录了一个视频演示https://www.bilibili.com/video/BV1JkcizWELT/
相关链接
项目地址:https://github.com/3084793958/Easy_Desktop
前传: https://bbs.deepin.org/post/295277
dde-dock插件接收器的写法
core/plugin_widget.h 和 core/plugin_widget.cpp中的写法是Easy_Desktop的特殊化写法,写的时候不必像我这么写
在dde-dock插件编写指导中写了dde-dock插件的实现方法,对于 插件接收器 ,做一个逆运算即可
1.dde-dock插件接口
dde-dock插件接口 会告诉 dde-dock插件能做什么 和 接收器能调用插件的哪些功能
插件接口一般在如下位置
如果没有,有两种解决方案:
1.安装依赖
2.为了方便编译,我在Easy_Desktop的源码中放了相同的接口定义文件
注:只有插件和接收器使用的接口定义相同,插件才能正常加载
Easy_Desktop中用的接口与最新的dde-dock接口不同(我在deepin20.9开发),dde-dock的新接口好像加了很多新东西,希望能够兼容吧
2.定义接口实现方法
pluginproxyinterface.h 和 pluginsiteminterface.h 中的定义很简单,有些甚至没有定义,我们需要override他来实现对应的功能
在此之前,先include一些必要的东西
定义插件实现方法PluginController
Plugin_Root将用于联系 接口与GUI,使PluginController能直接控制GUI
当然,用emit发信号的方式也是可以的,只不过当时的我没想到
之后在.cpp文件中逐个实现这些方法即可
这里类出几个重要的定义
方法作用在dde-dock插件编写指导中写得很详细
记得用itemInter->itemContextMenu(itemKey);实现右键菜单
然后用plugin_interface->invokedMenuItem(plugin_itemKey, menuId, checked);发给插件
itemInter->itemContextMenu(itemKey);只能被调用1次
还有就是单击主控件时需要执行plugin_interface->itemCommand(plugin_itemKey);
Easy_Desktop中右键菜单的构建方法
Plugin_Item_Widget是用于显示主控件的控件
在PluginController::itemAdded(PluginsItemInterface * const itemInter, const QString &itemKey)中调用
Plugin_Item_Widget::set_extra_menu(itemInter->itemContextMenu(itemKey));即可
单击主控件实现
3.实现插件载入
以下是载入函数
4.实现插件禁用
通过 plugin_interface->pluginIsAllowDisable(); plugin_interface->pluginIsDisable(); plugin_interface->pluginStateSwitched();即可实现
5.实现插件卸载
这是一个危险操作
dde-dock是在启动是载入插件,运行时处理插件的启用与禁用,所以dde-dock不需要处理插件卸载
有趣的是 接口定义 文件中是这么定义的
也就是说,dde-dock插件无法卸载?
能不能卸载以后再说
在Easy_Desktop中用 禁用插件+隐藏窗口 实现的,析构时不会删除,而是隐藏only_hide(),当然,也保留手动删除的方式unload_plugin()
6.连接GUI
你写着写着就会发现需要的函数越来越多的,先写再说