dde-dock与桌面程序是怎样通信的?
Tofloor
poster avatar
133******90
deepin
2017-10-14 00:15
Author
dde-dock和桌面程序之间是怎样进行通信的。比如桌面程序最小化的时候,怎样通知dock。
Reply Favorite View the author
All Replies
avatar
133******90
deepin
2017-10-14 00:15
#1
本帖最后由 wuqingyi 于 2017-10-13 16:29 编辑

@kirigaya @jingle
我觉得是通过dbus来进行通信的,dde-dock作为服务端与程序进行通信。但是程序是怎样知道要把信息传递到dde-dock的,应该是有一些特定的信息,可以让dde-dock识别出来。但是网上一直找不到相关的内容。能不能帮忙解答一下。
Reply View the author
avatar
justforlxz
deepin
2017-10-14 00:29
#2
dde-dock并没有与桌面程序有直接通信,是dock的后端收集状态,通过dbus告诉dock的。不过最小化这些状态似乎也不会通知过来的,只有变化的状态。

dtk有个类提供了当前工作区的窗口,可以通过监听列表变化,自己对比出哪个程序被最小化了。

DWindowManagerHelper提供了windowListChanged信号,然后读取currentWorkspaceWindows方法返回的list,自己对比一下哪个程序消失了,就可以知道它不在当前工作区了,再配合dock后端提供的数据,就可以得到结果了。
Reply View the author
avatar
justforlxz
deepin
2017-10-14 00:30
#3
https://bbs.deepin.org/post/146638
@kirigaya @jingle
我觉得是通过dbus来进行通信的,dde-dock作为服务端与程序进行通信。但是程序是怎样知道 ...

你想传递什么样的信息?  
Reply View the author
avatar
133******90
deepin
2017-10-14 00:38
#4
https://bbs.deepin.org/post/146638
dde-dock并没有与桌面程序有直接通信,是dock的后端收集状态,通过dbus告诉dock的。不过最小化这些状态似乎 ...

也就是说,整个过程中,dbus只是被用在了dde-dock的后端和前端的通信?
Reply View the author
avatar
133******90
deepin
2017-10-14 00:49
#5
https://bbs.deepin.org/post/146638
你想传递什么样的信息?

不是想传递信息,只是想知道dock是怎样知道程序被最小化,最大化了,焦点变化。
我原来以为存在某种规范,要求桌面程序在界面变化的时候使用dbus发出信号。而dock作为服务端相应这些信号做出反应。
原来不是这么回事啊。
Reply View the author
avatar
justforlxz
deepin
2017-10-14 01:21
#6
https://bbs.deepin.org/post/146638
也就是说,整个过程中,dbus只是被用在了dde-dock的后端和前端的通信?

dbus是进程间通信的一种技术,实际操作都是后端在处理的,前端界面只是展示这些数据而已。而前后端通信使用的是dbus。
Reply View the author
avatar
133******90
deepin
2018-01-30 00:36
#7
https://bbs.deepin.org/post/146638
dbus是进程间通信的一种技术,实际操作都是后端在处理的,前端界面只是展示这些数据而已。而前后端通信使 ...

今天又翻了一下资料,终于知道我该怎么表达我的意思了。
我原本以为,在窗口发生变化,如窗口最大化,最小化,关闭,失去焦点的时候,窗口管理器会通过dbus,以广播的方式,通知给系统中的其他感兴趣的程序(dde-dock)。其他感兴趣的程序就可以根据广播的消息做出反应。就像Android,在开机、低电量的时候,会通过intent给其他程序发送事件。
Reply View the author