maemo dbus(1)
2011-7-4 15:59:12
hildon-desktop 是如何使用service文件的?
通过desktop文件生存了菜单的布局
在生存菜单的时候做了如下处理
g_signal_connect (G_OBJECT (menu_item),
"activate",
G_CALLBACK (hd_applications_menu_activate_app),
button);
当用户点击了对应的菜单,便emit activate信号
hd_applications_menu_activate_app
首先找到菜单对应的desktop文件,找出service域
hd_wm_top_service
通过服务名来查找窗口
如果找不到就需要通过dbus启动服务
hd_wm_activate_service
向dbus 发出了一个 top_application的方法调用
原理如下
dbus-send --session --print-reply --dest=com.woojoy.browser /com/woojoy/browser com.woojoy.browser.top_application
如果找不到service文件,就找执行域,直接把后台进程启动。
查询活动的service
dbus-send --session --print-reply --dest=org.freedesktop.DBus /org/freedesktop/DBus org.freedesktop.DBus.ListActivatableNames
dbus是如何获取活动service的?
查看dbus中的driver.c
bus_driver_handle_list_activatable_services
使用如下结构体来描述活动的服务
struct BusActivation
{
int refcount;
DBusHashTable *entries;
DBusHashTable *pending_activations;
char *server_address;
BusContext *context;
int n_pending_activations; /**< This is in fact the number of BusPendingActivationEntry,
* i.e. number of pending activation requests, not pending
* activations per se
*/
DBusHashTable *directories;
DBusHashTable *environment;
};
bus_activation_list_services 也就是来遍历entries
这个entries是如何来获取的?
在/etc/dbus-1/system.conf 中指明service的路径
遍历目录下的所有文件来生存entry