maemo hildon-desktop(2)
老版本的源码地址 http://repository.maemo.org/
首先看一下 desktop 类型
struct _HDDesktopPrivate
{
gchar *config_file;
GnomeVFSMonitorHandle *system_conf_monitor;
GnomeVFSMonitorHandle *user_conf_monitor;
GHashTable *containers;
GHashTable *notifications;
GQueue *dialog_queue;
GObject *pm;
GtkTreeModel *nm;
#ifdef HAVE_LIBOSSO
osso_context_t *osso_context;
#endif
#ifdef HAVE_SAFE_MODE
gboolean safe_mode;
#endif
};
类初试化
static void
hd_desktop_class_init (HDDesktopClass *class)
{
GObjectClass *g_object_class = (GObjectClass *) class;
g_object_class->finalize = hd_desktop_finalize;
g_type_class_add_private (g_object_class, sizeof (HDDesktopPrivate));
}
设置了资源释放函数
实例初试化
hd_desktop_init
#define HD_DESKTOP_CONFIG_FILE "desktop.conf"
#define HD_DESKTOP_CONFIG_USER_PATH ".osso/hildon-desktop/"
首先从用户自定义的配置文件中读取配置信息
如下例
[Tasknavigator]
X-Type=panel_box
X-Position-X=0
X-Position-Y=0
X-Size-Width=165
X-Size-Height=40
X-Orientation=top
X-UI-Policy=libtasknavigatorpolicy.so
X-Is-Ordered=1
X-Config-File=tasknavigator.conf
X-Plugin-Dir=/usr/share/applications/hildon-navigator
[Home]
X-Type=home
X-Is-Ordered=0
X-Load-New-Plugins=1
X-Config-File=home.conf
X-Plugin-Dir=/usr/share/applications/hildon-home
[Statusbar]
X-Type=panel_expandable
X-Position-X=400
X-Position-Y=0
X-Size-Width=320
X-Size-Height=40
X-Orientation=top
X-UI-Policy=libstatusbarpolicy.so
X-Is-Ordered=1
X-Load-New-Plugins=1
X-Config-File=statusbar.conf
X-Plugin-Dir=/usr/share/applications/hildon-status-bar
接着查看环境变量中是否有 HILDON_DESKTOP_CONFIG_FILE 存在
如果有还要从这个环境变量中读取值
如果支持osso,还需要初试化osso_context
创建了插件管理类
在插件管理类中又创建了一个加载管理类
接着创建通知管理类
设置了一些信号处理函数
启动过程中加载容器是一个很重要的步骤。
hd_desktop_load_containers
加载过程中需要重新解析配置文件
解析
X-Is-Ordered
X-Load-New-Plugins
X-UI-Policy
如果有UI策略,还需要创建一个UI策略对象
X-Config-File
有3中典型的插件
1 navigator
2 statusbar
3 homeItem
其中homeitem和statusbar 各种扩展的一种类型,以so文件的方式
被hildon-desktop加载,而navigator直接调用的可执行文件
举个例子
可以扩充Home Item ,实现一组菜单栏显示