7.2.6 桌面
相比于任务条,这个示例的桌面程序要简单很多。而且,经过了前面任务条的讨论,我想读者应该不需要笔者再过多的啰唆了。同普通应用对比,其比较特殊的地方之一就是,要向窗口管理器亮明自己的身份,代码如下所示:
桌面程序使用标准的EWMH规范规定的属性_NET_WM_WINDOW_TYPE_DESKTOP标识该程序是一个桌面程序。GTK中的函数gtk_window_set_type_hint就是对Xlib的函数XChangeProperty的更高层的封装,我们直接使用即可。
winman将为桌面程序创建桌面窗口对象,并将其整个铺满在桌面背景上。同样,桌面窗口对象也不需要装饰,因此其函数desktop_client_reparent也是个空函数。其他细节,请读者参考随书光盘中附带的源代码。
至此,一个基本的桌面环境就已经搭建完毕了,读者将它们安装到vita系统,然后使用如下命令即可启动完整的桌面环境:
注意,桌面程序上的快捷方式"Hello World"的回调函数将到目录/usr/bin下寻找程序hello_gtk,所以请将这个程序复制到目录/usr/bin下。另外,也请确保程序taskbar、desktop使用的css主题描述安装在正确的目录下。如果遇到麻烦,请读者参考随书光盘中附带的源代码。
如果一切正常,将看到一个类似图7-14所示的完整桌面环境。
图 7-14 完整的桌面环境
这是一个经典的PC上的桌面环境。桌面下方是个任务条,其最左侧是个“开始”按钮。然后紧接着是快速启动栏,其中包含一个“显示桌面”的按钮。接下来当然就是各个任务项了。在图7-14所示的例子中,我们运行了两个hello_gtk程序,所以在任务条上有两个任务项。同时有一个程序专门负责桌面的背景,当然其上面还可以添加各种程序的快捷方式,比如这里添加了程序hello_gtk的快捷方式。
什么?没有Dashboard(Mac OS X的很有特色的一个桌面组件)?是的,这是一个很简陋的桌面环境。但是通过这个简陋的桌面,我们已经清楚了桌面环境的基本组成及运行原理,接下来,你可以按照意愿随意改造,甚至可以添加一个新的桌面组件,但是记得告诉窗口管理器将其放在了哪一个特殊的位置。
虽然如今的桌面环境越来越个性化,就如同那个“开始”按钮都可能消失一样,但是事实上,这些都是表面现象。如果你对众多操作系统比较了解,你就会知道,它们本质上完全相同,只是表象不同而已,就看你是否足够艺高且敢于创造了。