您的位置:首页 > 运维架构 > Linux

学习gnome-panel源码,了解linux gtk编程

2008-07-25 16:55 751 查看
1. 通过精读gnome-panel源码包,了解gnome-pane实现的机制。

gnome-panel包括桌面上方菜单,条形面板,状态显示条,快捷图标,还有下方显示最小化窗口,桌面切换几个部分。

菜单的显示是动态产生的,每次gnome-panel的启用都会自动创建菜单项,在panel初始时,会先根据在配置的菜单文件找到需要创建的项目--"/etc/xdg/menus/",如applications.menu中定义了所有的菜单项的信息,如Development、Office等,文件采用的是XML形式。

<!-- Office --> //定义应用程序中的Office办公菜单
<Menu> //每一组<Menu></Menu>定义出一个菜单,通过嵌套可以定义多级目录。
<Name>Office</Name> //菜单在显示时的名称
<Directory>Office.directory</Directory> //该文件定义office菜单的信息
<Include> //该菜单要显示哪些项目
<And>
<Category>Office</Category> //可以定义多个类型,<And>表示同时满足,<Or>满足其一,<Not>等。
</And>
</Include>
</Menu> <!-- End Office -->

使用:
<And> //<And>表示在其定义的Category中的类型同时满足
<Category>Accessibility</Category>
<Not><Category>Settings</Category></Not> //将所有的Categories中包括Accessibility而不包括Settings
</And> //所有元素列为该菜单的元素

Office.directory这是一个文件存放在/usr/share/desktop-directories目录中,
vi /usr/share/desktop-directories/Office.directory
内容如下:
[Desktop Entry]
Name=Office
....根据不同的编码环境显示不同的name,coment
Type=Directory
Icon=applications-office
Encoding=UTF-8
X-Ubuntu-Gettext-Domain=gnome-menus

标识菜单中的信息如菜单类型等,如果对菜单中每一个元素属性,按照desktop文件提供的信息显示出来,里面对菜单各个选项对应出一
个".desktop"类型的文件,”/usr/share/applications/*.desktop“里面存放着所有元素的具体信息,如类型
(Categories),图标,以及执行程序。
Name 默认名字
Name[zh_CN] 中文名字
Comment 默认注释
Comment[zh_CN] 中文注释

名字和注释如果你需要可以添加多项不同语言,这样你就可以在不同语言的环境中使用它
Exec=定义执行文件的路径
Icon=xxxx.png 菜单的图标(默认为/usr/share/pixmaps目录的图表)
Type=Application 表示是菜单项
Categories 所属上级目录,父目录通过至显示出其子项。
Categories=GTK;Graphics;RasterGraphics;Scanning;OCR; //可以有多个,以';'分隔开,从左至右查询自己定义的上级目录。

panel中提供的很强的对XML文件的解析函数,将一个XML文件解析成一棵树型结构的菜单。在显示时,根据XML文件的定义,当鼠标指向任意菜单项,会先将读出其信息,判断是否具有子菜单项,并其根据配置信息创建出来widget,动态显示整个菜单。

其中,还有一部分是applet的应用,即鼠标右键弹出的快捷菜单实现等,这一部分是gtk中的内容,慢慢看看应该能明白。

panel实现非常完整,代码认人感觉就是精练,有很丰富的学习价值,里面涉及的显示菜单的过程,对用户如何手动更改菜单子项的即时更新实现。
panel中提供的很强的对XML文件的解析函数,将一个XML文件解析成一棵树型结构的菜单。在显示时,根据XML文件的定义,当鼠标指向任意菜单项,会先将读出其信息,判断是否具有子菜单项,并其根据配置信息创建出来widget,动态显示整个菜单。

其中,还有一部分是applet的应用,即鼠标右键弹出的快捷菜单实现等,这一部分是gtk中的内容,慢慢看看应该能明白。

panel实现非常完整,代码认人感觉就是精练,有很丰富的学习价值,里面涉及的显示菜单的过程,对用户如何手动更改菜单子项的即时更新实现。

2. 学习gtk编程及glade窗体设计工具的使用。
gtk是基于c语言实现的,具有高效率的显示方式及不同组件之间通信的机制,gtk采用信号与回调的机制,使各个组件与每一个相关信号进行绑定,通过信号触发相应的执行函数。里面提供大量的函数库,在理解的基础上,写出自己的桌面程序。
glade设计界面被保存为XML格式,使用libGlade库可以动态加载这此文件,并可以被多种语言使用。

3. 简单学习python的编程,了解模块的概念,python的对象编程。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: