doc: update document, add PopupWindow & DBus

Change-Id: I00c271a9579929e5c418ffea922e6e728e8c7371
This commit is contained in:
石博文 2018-07-31 17:24:04 +08:00
parent f09f27680a
commit e9dda3caef
No known key found for this signature in database
GPG Key ID: FC9610D6400A173C
Notes: gerrit 2018-07-31 17:27:50 +08:00
Verified+1: <jenkins@deepin.com>
Code-Review+2: 石博文 <sbw@sbw.so>
Submitted-by: 石博文 <sbw@sbw.so>
Submitted-at: Tue, 31 Jul 2018 17:27:49 +0800
Reviewed-on: https://cr.deepin.io/37286
Project: dde/dde-dock
Branch: refs/heads/master

View File

@ -45,6 +45,10 @@ Dock 上从左至右(或从上至下)有不同的 Items 区域,在不同
需要注意的是,主面板类并不直接去控制 Items 列表的顺序,更不会去添加与销毁某个 Item。为了保证解耦功能上不能与 Controller 混淆,所以对 Item 的控制操作应该 __全部__ 来自于 ItemController 的控制信号。
### Popup Window
`Popup Window` 是一个特殊的控件。它是所有 Item 中用来显示提示信息,或是显示弹出式控件、列表的一个容器。但是考虑到这种控件使用频率非常高,如果在每个 Item 中创建多个的话很浪费内存,所以将 `PopupWindow` 设计为一个全局的控件,所有的 Item 共用这个控件。
## 插件
插件是符合标准的 Qt Plugins。插件的开发不必熟悉 dock 的所有代码,只需要熟悉一般的 Qt 插件开发过程,并了解 dock 所提供的接口。dock 的接口安装 `dde-dock-dev` 包即可。这也是方便插件开发者在无需配置完整的 dock 开发环境的情况下,更方便的进行 dock 插件的开发。
@ -61,4 +65,24 @@ Dock 上从左至右(或从上至下)有不同的 Items 区域,在不同
插件接口定义在 `interfaces/*.h` 中,参考具体类或函数的注释。
## DBus 接口
dock 主程序提供了一个 DBus 服务,可供外部访问到 dock 的 geometryRect 信息。这个信息也可以从后端的接口中读取,创建这个接口的最初目的是用作调试。当 dock 位置不正确时,可以比对此接口的信息与后端的信息。
其中后端的信息代表了 dock 主程序计算的结果,如果这个数据错误,就说明 dock 在位置计算的部分有 bug。
如果后端信息正确,而本接口中的数据错误,那就是计算正确,但是在向 X Server 发送对应的控制请求时出错。
通过检查两个接口的数据是否相同,也是一个进行自我检查的方法。目前在 `MainWindow::positionCheck` 中就进行了这样的操作,当发现两个数据不相同时,就重新向 X Server 发送请求,以此来 workaround 某些情况下 dock 位置不正确的问题。
# 优化
## MainWindow
目前所有的动画都被放在了 `MainWindow` 中进行处理。经过多次的改动,现在 `MainWindow` 中已经有很多动画相关的代码,这使得在进行窗口管理时不得不考虑动画的很多事情。
以后可以尝试将动画部分剔除出来,`MainWindow` 只进行窗口位置、大小等操作,尤其是应该把涉及到 `MainPanel` 动画的部分移动到 `MainPanel` 类中去,以此来减少在 `MainWindow` 中控制其它控件所带来的混乱。
## Popup Window
共用 `PopupWindow` 带来了很多好处,但是如果在使用时没有好好处理 data race、或是在 Tips Window 与 Model Window 切换中没有处理好顺序,就会造成很难调试,也很难处理的问题。可以尝试在这方面做一些优化。