<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://bugs.maemo.com/skins/common/feed.css?207"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title>maemo.org wiki - User contributions [en]</title>
		<link>http://bugs.maemo.com/Special:Contributions/Maemo</link>
		<description>From maemo.org wiki</description>
		<language>en</language>
		<generator>MediaWiki 1.15.5-7</generator>
		<lastBuildDate>Thu, 09 Apr 2026 06:56:24 GMT</lastBuildDate>
		<item>
			<title>MADDE/QtCreator integration for linux</title>
			<link>http://bugs.maemo.com/MADDE/QtCreator_integration_for_linux</link>
			<guid>http://bugs.maemo.com/MADDE/QtCreator_integration_for_linux</guid>
			<description>&lt;p&gt;Maemo:&amp;#32;moved QtCreator integration for linux to MADDE/QtCreator integration for linux&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= QtCreator and MADDE on Linux =&lt;br /&gt;
&lt;br /&gt;
This is a guide on how to enable MADDE in QtCreator. This is part of the technology preview. After following this guidance you are able to build your sources within QtCreator for your device, and deploy, run and debug your applications with few mouse clicks from your Linux installation (Ubuntu was used for this tutorial).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Requires:&lt;br /&gt;
&lt;br /&gt;
* [[MADDE | MADDE]] installed on your Linux machine&lt;br /&gt;
* If you want to compile your code natively then you have to have &amp;quot;make&amp;quot; installed on your machine. If it is not install yet you can do that with:&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install make&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== General advice ==&lt;br /&gt;
As this is a technology preview, remember that bugs can occur. If some of the components don't work as expected, please add your question to the [http://talk.maemo.org/showthread.php?t=46570 talk-thread] and follow up the discussion.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Install latest QtCreator on your Linux computer ==&lt;br /&gt;
&lt;br /&gt;
'''You cannot use the latest official QtCreator for this. The version has to be &amp;gt;= 1.3.80! For these instructions the version of the 2010-03-04 is used!''' Find the latest build of QtCreator for Linux here:&lt;br /&gt;
&lt;br /&gt;
http://qt.nokia.com/developer/qt-snapshots&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Add Qt for Maemo5 ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can change the configuration of the Qt-version in your QtCreator installation by clicking:&lt;br /&gt;
&lt;br /&gt;
 QtCreator -&amp;gt; Preferences -&amp;gt; Qt4 -&amp;gt; Qt Versions&lt;br /&gt;
&lt;br /&gt;
'''Tip:''' If you do not see any Qt version by default here, you most likely haven't installed the needed Qt libraries to compile your Qt application for your Linux environment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In the next step you have to add the Qt version for Maemo5 to the configuration of QtCreator. It is needed to compile your sources for your Maemo device. Click on the &amp;quot;+&amp;quot; in the upper-right corner. The configuration form will ask you to enter a &amp;quot;Version name&amp;quot; and to locate &amp;quot;qmake&amp;quot;. You can find it in your MADDE installation folder under:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;MADDE_folder&amp;gt;/targets/&amp;lt;target_name&amp;gt;/bin&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For the '''standard installation''' it would be for example:&lt;br /&gt;
&lt;br /&gt;
 Version name: Maemo Qt4.5&lt;br /&gt;
 qmake Location: /home/&amp;lt;username&amp;gt;/.madde/0.6.14/targets/fremantle-qt-0951/bin/qmake&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Tip:''' You cannot find the folder if you click on &amp;quot;Choose...&amp;quot;, as it is hidden. But after entering &amp;quot;/home/&amp;lt;username&amp;gt;/.madde/&amp;quot; in the text-field &amp;quot;qmake Location&amp;quot; you can select the rest via the &amp;quot;Choose...&amp;quot; button.&lt;br /&gt;
&lt;br /&gt;
[[Image:01_linux_qtcreator_add_qmake.png|300px]]  [[Image:02_linux_qtcreator_select_qmake.png|300px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now you will see Qt for Maemo as a new Qt Version in Qt Creator. But first you will see the red cross next to the Qt Version in the column &amp;quot;Debugging Helper&amp;quot;. The last step you have to do now is clicking on &amp;quot;Rebuild&amp;quot; and after a while (you can follow the status in the QtCreator main window) it should look like this:&lt;br /&gt;
&lt;br /&gt;
[[Image:03_linux_qtcreator_qmake_rebuild.png|300px]] [[Image:04_linux_qtcreator_qmake_ready.png|300px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configure device run-time in Qt Creator ==&lt;br /&gt;
&lt;br /&gt;
After setting up the connection between your Linux computer and your device, you will be able to compile, deploy, test and debug your application with a single mouse-click. The description shows the configuration for USB-networking and WLAN and is for each divided into two parts. It shows:&lt;br /&gt;
&lt;br /&gt;
* what to install on device, and&lt;br /&gt;
* how to set-up your Linux machine&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== General device set-up ===&lt;br /&gt;
&lt;br /&gt;
Please find the instructions on how to set up the device runtime from here:&lt;br /&gt;
&lt;br /&gt;
* [[MADDE/QtCreator_integration_for_windows#Install_the_client | Install the client]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Connect via USB-networking ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Device configuration ====&lt;br /&gt;
&lt;br /&gt;
The following guide shows you, what to do on your device to set up the USB connection. This has to be done '''before''' you connect your device with the Linux computer:&lt;br /&gt;
&lt;br /&gt;
* [[MADDE/QtCreator_integration_for_windows#Configure_the_client_for_USB | Configure the client for USB networking]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Linux configuration ====&lt;br /&gt;
&lt;br /&gt;
Connect the device with your Linux machine. Then you click on &amp;quot;PC Suite mode&amp;quot; as connection mode. Now you should be able to see the device as a new wired network connection named &amp;quot;Auto usb0&amp;quot;. Now you can configure the connection as follows.&lt;br /&gt;
&lt;br /&gt;
1. Open the network connection settings:&lt;br /&gt;
&lt;br /&gt;
[[Image:05_linux_network.png|400px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. Change the method from &amp;quot;DHCP&amp;quot; to &amp;quot;Manual&amp;quot; and enter the details as shown in the screen-shot:&lt;br /&gt;
&lt;br /&gt;
[[Image:06_linux_configure_usb.png|400px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
After you have done this your connection should be established and the set-up ready to be used with QtCreator.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Connect via WLAN ===&lt;br /&gt;
&lt;br /&gt;
If both devices are connected to the same wireless network the configuration is a bit easier, but be aware that the IP address might not be the same all the time. This effects the set up of your QtCreator configuration.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Device configuration ====&lt;br /&gt;
&lt;br /&gt;
Please open the mad-developer application. If you are connected already to the wireless network, you can find the IP address in the initial window of the application:&lt;br /&gt;
&lt;br /&gt;
[[Image:10_mac_mad-dev_wlan.png|300px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Linux configuration ====&lt;br /&gt;
&lt;br /&gt;
Please just make sure, that your Linux computer and device are connected to the same network.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== QtCreator Configuration ===&lt;br /&gt;
&lt;br /&gt;
After the connection between your PC and the device is set up, you can configure QtCreator to deploy and run the built applications on device. You can add your device in the configuration. You will find it in:&lt;br /&gt;
&lt;br /&gt;
 QtCreator -&amp;gt; Preferences -&amp;gt; Qt4 -&amp;gt; Maemo Device Configurations&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
First get the password from the Mad Developer application. You get it by clicking on &amp;quot;Developer Password&amp;quot; in the main view. '''Be aware''' that each time you click on the button, a new password will be created and that the password is only valid for the time it is shown in the application. &lt;br /&gt;
&lt;br /&gt;
[[Image:04_b_client_ready.png|300px]] [[Image:05_client_pw.png|300px]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Instructions for USB-network====&lt;br /&gt;
&lt;br /&gt;
Add the password and all the data you see in the screenshot below. Check the box, that you want to use the password as the authentication method. After that click on &amp;quot;test&amp;quot; and see if the connection can be set up.&lt;br /&gt;
&lt;br /&gt;
[[Image:07_linux_qtcreator_usb.png|300px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Instructions for WLAN====&lt;br /&gt;
&lt;br /&gt;
If your device is using the WLAN interface, please enter the IP address you can see in the mad-developer application on device.&lt;br /&gt;
&lt;br /&gt;
[[Image:08_linux_qtcreator_wlan.png|300px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Tip''' You can use your ssh key for the connection. Click on &amp;quot;Deploy Key ...&amp;quot; and select your key. If the other settings are correct the key will be automatically deployed on your device, so that you don't have to worry about the passwords anymore.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Deploy SSH key ===&lt;br /&gt;
&lt;br /&gt;
If you have already created a key for other purposes you don't have to create a new one and you can ignore the description on how to create the key and just continue with the deployment of the key. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Create a key ====&lt;br /&gt;
&lt;br /&gt;
To create a key please open terminal and run:&lt;br /&gt;
&lt;br /&gt;
 ssh-keygen -t rsa -b 1024&lt;br /&gt;
&lt;br /&gt;
Then please follow the instructions. If you don't choose a new location, the key will be stored in the standard location in the home folder (recommended). The terminal should look like this:&lt;br /&gt;
&lt;br /&gt;
[[Image:09_linux_keygen.png|400px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Deploy the key from QtCreator ====&lt;br /&gt;
&lt;br /&gt;
To be able to connect to your device by using the key, you have to:&lt;br /&gt;
&lt;br /&gt;
* deploy your public key on your device, and&lt;br /&gt;
* specify in QtCreator, where to find the private key&lt;br /&gt;
&lt;br /&gt;
You can configure these settings in the Maemo Device Configurations&lt;br /&gt;
&lt;br /&gt;
 Tools -&amp;gt; Options... -&amp;gt; Qt4 -&amp;gt; Maemo Device Configurations&lt;br /&gt;
&lt;br /&gt;
'''Note: ''' For these steps your device has to be connected to the PC and the password has to be valid. By clicking &amp;quot;Test&amp;quot; button, you can check if that is the case.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now you click on &amp;quot;Deploy...&amp;quot; and select the public key you have created before. &lt;br /&gt;
&lt;br /&gt;
[[Image:10_linux_select_pubkey.png‎|300px]]&lt;br /&gt;
&lt;br /&gt;
Once the key is deployed correctly you can set up your device-configuration to use the key to connect to the device. Change now the &amp;quot;Authentication type&amp;quot; from &amp;quot;Password&amp;quot; to &amp;quot;Key&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Image:11_linux_setkey.png‎|300px]]&lt;br /&gt;
&lt;br /&gt;
Now click on &amp;quot;Apply&amp;quot; and your QtCreator installation is set up to connect to the device via SSH key.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Use Maemo5 build settings ==&lt;br /&gt;
&lt;br /&gt;
Now all the configuration is done and you can select Maemo as a build configuration. If you have a project, which you want to compile for Maemo, then click on the project button in the menu of the left side. Now you should seen a screen, like in the screen shot below. If you have the Qt libraries installed, then you will have the &amp;quot;Desktop&amp;quot; as the default option selected.&lt;br /&gt;
&lt;br /&gt;
[[Image:12_linux_initial_config.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Tip:''' &lt;br /&gt;
&lt;br /&gt;
* It might be that you don't see the &amp;quot;Desktop&amp;quot; widget in your project configuration. In this case it might be that the configuration of the MADDE is not correct, or that a little bug prevents the widget from showing up. In this case click on &amp;quot;Dependencies&amp;quot; and then go back to &amp;quot;Build&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* If you start a new project you can add the Maemo build-configuration at the beginning:&lt;br /&gt;
&lt;br /&gt;
:[[Image:13_linux_start_new_project.png|300px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now press the plus in the widget, which shows, that &amp;quot;Desktop&amp;quot; is selected as default. This should open a new dialog, where you select &amp;quot;Maemo&amp;quot;. After that you will find a new build-configuration. Now click in &amp;quot;Maemo&amp;quot; on &amp;quot;Run&amp;quot; and select your device, which you have configured before. In the example it was called Maemo 5.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:14_linux_select_device.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finally you can now set in the down left corner, which build configuration you want to use:&lt;br /&gt;
&lt;br /&gt;
[[Image:15_linux_select_runtime.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now you can click on the run button, and your application will be automatically compiled for the Maemo device, delpoyed, and started.&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</description>
			<pubDate>Wed, 24 Mar 2010 09:06:10 GMT</pubDate>			<dc:creator>Maemo</dc:creator>			<comments>http://bugs.maemo.com/Talk:MADDE/QtCreator_integration_for_linux</comments>		</item>
		<item>
			<title>Documentation/Maemo 5 Final SDK/Discover Maemo 5 SDK</title>
			<link>http://bugs.maemo.com/Documentation/Maemo_5_Final_SDK/Discover_Maemo_5_SDK</link>
			<guid>http://bugs.maemo.com/Documentation/Maemo_5_Final_SDK/Discover_Maemo_5_SDK</guid>
			<description>&lt;p&gt;Maemo:&amp;#32;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Panorama Desktop =&lt;br /&gt;
[[Image:panaroma.png|500px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Four virtual desktops or home screens &lt;br /&gt;
*Personalize each of the desktops to your content &lt;br /&gt;
*Slide through them with the click and drag  gesture of the mouse&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Multi Tasking=&lt;br /&gt;
[[Image:TaskSwitcher.png|500px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*No longer view one application at a time. &lt;br /&gt;
*Active thumbnail view of all open applications. &lt;br /&gt;
*A button click to switch between open applications. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Home Widgets=&lt;br /&gt;
[[Image:desktop.png|500px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Add cool widgets to your home &lt;br /&gt;
*Develop new widgets &lt;br /&gt;
*[http://wiki.maemo.org/Documentation/Maemo_5_Developer_Guide/Application_Development/Writing_Desktop_Widgets#Home_Widgets Learn how to do them] &lt;br /&gt;
*[https://garage.maemo.org/svn/maemoexamples/trunk/example_desktop_widget/ Example clock widget]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Web Browser=&lt;br /&gt;
[[Image:Browser.png|500px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Full screen, 800X480 resolution &lt;br /&gt;
*Advanced interactive mode &lt;br /&gt;
*Recent browser history as thumbnails &lt;br /&gt;
*Mozilla browser engine &lt;br /&gt;
*Browser interface API (Debian Package:tablet-browser-interface)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Email=&lt;br /&gt;
[[Image:email.png|500px]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Modest Email Client &lt;br /&gt;
*Easy setup of email accounts &lt;br /&gt;
*[http://wiki.maemo.org/Documentation/Maemo_5_Developer_Guide/Using_Data_Sharing/SendVia_Functionality Email interface API tutorial] &lt;br /&gt;
*[https://garage.maemo.org/svn/maemoexamples/trunk/maemopad/ Example code]&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
=Contacts=&lt;br /&gt;
[[Image:contacts.png|500px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Smooth integration with VOIP and IM contacts &lt;br /&gt;
*Address Book API (LINK)&lt;br /&gt;
*[http://wiki.maemo.org/Documentation/Maemo_5_Developer_Guide/Using_Generic_Platform_Components/Using_Address_Book_API Tutorial]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Calendar=&lt;br /&gt;
[[Image:calendar.png|500px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Manage events &lt;br /&gt;
*Create multiple calendars  &lt;br /&gt;
*Calendar interface API (LINK) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Clock=&lt;br /&gt;
[[Image:clock.png|500px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*World clock &lt;br /&gt;
*Manage alarm events &lt;br /&gt;
*[http://wiki.maemo.org/Documentation/Maemo_5_Developer_Guide/Using_Generic_Platform_Components/Alarm_Framework Alarm Framework Tutorial] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Photos=&lt;br /&gt;
[[Image:photoviewer.png|500px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*View images &lt;br /&gt;
*Simple edit functions  &lt;br /&gt;
*Create new sharing plugins &lt;br /&gt;
*[http://wiki.maemo.org/Documentation/Maemo_5_Developer_Guide/Using_Data_Sharing/Sharing_Plug-in#Sharing_Plug-in_Creation Sharing Tutorial] &lt;br /&gt;
*Sharing plugin API (LINK)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Application Manager=&lt;br /&gt;
[[Image:appmgr.png|500px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Manage application catalogues &lt;br /&gt;
*Download new applications &lt;br /&gt;
*Update or remove installed applications &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Media Player=&lt;br /&gt;
[[Image:mediaplayer.png|500px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Create playlists &lt;br /&gt;
*[http://wiki.maemo.org/Documentation/Maemo_5_Developer_Guide/Using_Multimedia_Components/Media_Application_Framework_(MAFW) Media Application Framework tutorial] &lt;br /&gt;
*APIs&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=File Manager=&lt;br /&gt;
[[Image:filemanager.png|500px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Manage ﬁles and folders &lt;br /&gt;
*File Management APIs (LINK)&lt;br /&gt;
*[https://garage.maemo.org/svn/maemoexamples/branches/fremantle-sdk-testing/maemo-examples/example_file_chooser.c Example code] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Virtual Keyboard=&lt;br /&gt;
[[Image:vbk2.png|500px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Ability to use virtual ﬁnger keyboard instead of hardware keys. &lt;br /&gt;
*[https://stage.maemo.org/svn/maemo/projects/haf/trunk/hildon-input-method-plugins-example/ Example code]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Xterm=&lt;br /&gt;
[[Image:xterm.png|500px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Console terminal&lt;/div&gt;</description>
			<pubDate>Tue, 06 Oct 2009 08:48:08 GMT</pubDate>			<dc:creator>Maemo</dc:creator>			<comments>http://bugs.maemo.com/Talk:Documentation/Maemo_5_Final_SDK/Discover_Maemo_5_SDK</comments>		</item>
		<item>
			<title>Documentation/Maemo 5 Developer Guide/Architecture/Imaging and Sharing</title>
			<link>http://bugs.maemo.com/Documentation/Maemo_5_Developer_Guide/Architecture/Imaging_and_Sharing</link>
			<guid>http://bugs.maemo.com/Documentation/Maemo_5_Developer_Guide/Architecture/Imaging_and_Sharing</guid>
			<description>&lt;p&gt;Maemo:&amp;#32;/* Imaging and Sharing High Level Architecture */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Imaging and Sharing High Level Architecture=&lt;br /&gt;
&lt;br /&gt;
Subsystems of Imaging and Sharing domain are implementing means to produce, review, change, and share photography content on the device.&lt;br /&gt;
&lt;br /&gt;
Following user-accessible applications are provided by Imaging and Sharing domain:&lt;br /&gt;
* Camera Application is a graphical interface to camera hardware. It accesses OMAP3 camera HW subsystem through a GStreamer-based middleware.&lt;br /&gt;
* Image Viewer allows to view photographs and images and supports simple/basic image editing functionality.&lt;br /&gt;
&lt;br /&gt;
Sharing subsystem provides direct integration to an extensible set of internet services like OVI, with simple interface for uploading (i.e. “sharing”) content e.g. images to those services.&lt;br /&gt;
&lt;br /&gt;
The diagram below shows the main interfaces of the domain. &lt;br /&gt;
&lt;br /&gt;
[[Image:Imaging_Sharing_sw_context.png|480px]] &amp;lt;br&amp;gt;&lt;br /&gt;
''Imaging and Sharing, Software Context''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Interfaces provided==&lt;br /&gt;
{|border=1&lt;br /&gt;
|'''Interface'''&lt;br /&gt;
|'''Description'''&lt;br /&gt;
|-&lt;br /&gt;
|Image Viewer UI&lt;br /&gt;
|The primary user interface for viewing still images and manipulating them.&lt;br /&gt;
|-&lt;br /&gt;
|Sharing UI&lt;br /&gt;
|The user interface for sharing content via internet services such as Nokia’s OVI.&lt;br /&gt;
|-&lt;br /&gt;
|Camera UI&lt;br /&gt;
|The primary user interface for using the device’s camera for capturing still images and video.&lt;br /&gt;
|-&lt;br /&gt;
|GDigicam&lt;br /&gt;
|An abstraction over complex set of GStreamer pipelines used to perform still image and video capturing.&lt;br /&gt;
|-&lt;br /&gt;
|Sharing plug-in extensions&lt;br /&gt;
|An interface for external developers to extend Sharing subsystem's reach to internet services.&lt;br /&gt;
|-&lt;br /&gt;
|Viewing capability&lt;br /&gt;
|Image Viewer application is the device’s primary means to view images, and it thus launched when user wants to handle the associated image files.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==System decomposition view==&lt;br /&gt;
&lt;br /&gt;
===Camera application===&lt;br /&gt;
{|border=1&lt;br /&gt;
|'''Name'''&lt;br /&gt;
|'''Camera application'''&lt;br /&gt;
|-&lt;br /&gt;
|'''Purpose'''&lt;br /&gt;
|Implements the camera UI interface&lt;br /&gt;
|-&lt;br /&gt;
|'''Responsibilities'''&lt;br /&gt;
| &lt;br /&gt;
*Implements camera controls for end user (e.g. open, close, capture, zoom)&amp;lt;br&amp;gt;&lt;br /&gt;
*Implements camera settings (e.g. scene modes, flash settings etc.)&amp;lt;br&amp;gt;&lt;br /&gt;
*Implements indicators (e.g. shake indicator)&amp;lt;br&amp;gt;&lt;br /&gt;
*Implements main power management for camera &lt;br /&gt;
|-&lt;br /&gt;
|'''License'''&lt;br /&gt;
|Nokia&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Interfaces provided====&lt;br /&gt;
{|border=1&lt;br /&gt;
|'''Interface name'''&lt;br /&gt;
|'''Dependency'''&lt;br /&gt;
|'''Description'''&lt;br /&gt;
|-&lt;br /&gt;
|GDigigcam&lt;br /&gt;
|GStreamer&lt;br /&gt;
|High-level model abstraction of a GStreamer-based pipelines to access camera features&lt;br /&gt;
|-&lt;br /&gt;
|GDIGICAM facade&lt;br /&gt;
|GDigicam&lt;br /&gt;
|Facade to interact with media objects in Camera UI&lt;br /&gt;
|-&lt;br /&gt;
|Gdigicam manager&lt;br /&gt;
|GStreamer&lt;br /&gt;
|Abstract interface over camera operations&lt;br /&gt;
|-&lt;br /&gt;
|Camerabin&lt;br /&gt;
|Multimedia framework&lt;br /&gt;
|Component to control camera pipeline on GStreamer level&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
GDigicam library and Camerabin GStreamer element are provided as Free Software under LGPL2.1 in order to allow alternative implementations of certain image processing steps.&lt;br /&gt;
&lt;br /&gt;
===Image Viewer===&lt;br /&gt;
{|border=1&lt;br /&gt;
|'''Name'''&lt;br /&gt;
|'''Image Viewer'''&lt;br /&gt;
|-&lt;br /&gt;
|'''Description'''&lt;br /&gt;
|A viewer like content management application.&lt;br /&gt;
|-&lt;br /&gt;
|'''Responsibilities'''&lt;br /&gt;
|&lt;br /&gt;
*Implements a simple and fast interface for context sensitive user interface for viewing and selecting and categorizing the images.  &amp;lt;br&amp;gt;&lt;br /&gt;
*Supports viewing of single images, snapshot views based on selectable categories and image presentations.&lt;br /&gt;
|-&lt;br /&gt;
|'''Notes'''&lt;br /&gt;
|Image Viewer is a single instance application, only one viewer instance available at a time.&lt;br /&gt;
|-&lt;br /&gt;
|'''License'''&lt;br /&gt;
|Nokia&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Interfaces provided====&lt;br /&gt;
{|border=1&lt;br /&gt;
|'''Interface'''&lt;br /&gt;
|'''Dependency'''&lt;br /&gt;
|'''Description'''&lt;br /&gt;
|-&lt;br /&gt;
|Viewing capability&lt;br /&gt;
|User&lt;br /&gt;
|User interface to access Image Viewer application functionality&lt;br /&gt;
|-&lt;br /&gt;
|Launch application&lt;br /&gt;
|D-Bus&lt;br /&gt;
|D-Bus interface to open the Image Viewer application, used by Camera, Browser, File Manager, Email.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Sharing===&lt;br /&gt;
{|border=1&lt;br /&gt;
|'''Name'''&lt;br /&gt;
|'''Sharing'''&lt;br /&gt;
|-&lt;br /&gt;
|'''Purpose'''&lt;br /&gt;
|Sharing subsystem implements means to upload a content originating on the device to internet-based social services.&lt;br /&gt;
|-&lt;br /&gt;
|'''Responsibilities'''&lt;br /&gt;
|&lt;br /&gt;
*Implements dialogs for uploading of images to supported internet services &amp;lt;br&amp;gt;&lt;br /&gt;
*Implements simple management  (i.e. filtering, adding) of metadata for images to be shared &amp;lt;br&amp;gt;&lt;br /&gt;
*Implements an API for extensions to add support for new internet services&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|'''Notes'''&lt;br /&gt;
|Sharing subsystem contributes libraries which are used from within the context of other applications. Image Viewer is a primary consumer of these services within Imaging and Sharing domain.&lt;br /&gt;
|-&lt;br /&gt;
|'''License'''&lt;br /&gt;
|Nokia. Plug-in API is available under LGPL2.1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Interfaces provided====&lt;br /&gt;
{|border=1&lt;br /&gt;
|'''Interface name'''&lt;br /&gt;
|'''Dependency'''&lt;br /&gt;
|'''Description'''&lt;br /&gt;
|-&lt;br /&gt;
|Sharing plugins API&lt;br /&gt;
|Plugins API for sharing components&lt;br /&gt;
|An API for adding support for new internet services&lt;br /&gt;
|}&lt;/div&gt;</description>
			<pubDate>Mon, 05 Oct 2009 17:41:54 GMT</pubDate>			<dc:creator>Maemo</dc:creator>			<comments>http://bugs.maemo.com/Talk:Documentation/Maemo_5_Developer_Guide/Architecture/Imaging_and_Sharing</comments>		</item>
		<item>
			<title>Documentation/Maemo 5 Developer Guide/Architecture/Multimedia Domain</title>
			<link>http://bugs.maemo.com/Documentation/Maemo_5_Developer_Guide/Architecture/Multimedia_Domain</link>
			<guid>http://bugs.maemo.com/Documentation/Maemo_5_Developer_Guide/Architecture/Multimedia_Domain</guid>
			<description>&lt;p&gt;Maemo:&amp;#32;/* Gstreamer */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Multimedia Domain=&lt;br /&gt;
The Multimedia Framework Domain is a combination of a Multimedia Framework (GStreamer), a sound server (PulseAudio), a policy subsystem (OHM and libplayback), codecs and algorithms (for ARM and DSP) , a small number of UIs (status menus and control panel applets) and various libraries (alsa).&lt;br /&gt;
&lt;br /&gt;
It provides audio/video playback, streaming services, imaging and metadata gathering support.  More in general, it takes care of the actual audio/video data handling (retrieval, demuxing, decoding and encoding, seeking …). &lt;br /&gt;
&lt;br /&gt;
The clients of the Multimedia framework are the Multimedia Applications, RTC subsystem, and all the Linux applications/entities which produce sounds through the PulseAudio, ESD or ALSA interfaces and capture images from the V4L2 interface.&lt;br /&gt;
The Multimedia Framework subsystem is partially located on the user space of Linux and on the DSP.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:OMAP_architecture.png|800px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Major challenge for the Multimedia framework is to provide the same interfaces like on desktop Linux for different hardware platforms. In order to achieve this objective, the whole audio processing is moved to the ARM side (ALSA / PulseAudio) and OpenMAX IL is introduced to abstract 	the hardware specific components (codecs and other hardware accelerated elements). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Video subsystem==&lt;br /&gt;
&lt;br /&gt;
[[Image:mmf_video_decomposition.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Video Codecs===&lt;br /&gt;
Most of the video encoders and decoders are wrapped under the OpenMAX IL interface [OMAX], which abstracts the codec specific implementation (which in general can run on ARM or DSP). All the OpenMAX IL video codecs will be running on the DSP side in order to best exploit the HW acceleration provided by the OMAP 3430 platform. The DSP based OpenMAX IL components are loaded by TIs IL-Core, which in turn uses LCML and the DSP-Bridge. The ARM based OpenMAX IL are loaded via Bellagio IL-Core. Both IL-Cores are used by the gst-openmax bridge. The GStreamer framework resides on the ARM side. &lt;br /&gt;
&lt;br /&gt;
Video post processing is performed on DSS screen accelerator. DSS is used to do the colorspace conversion, the scaling and composition, including overlays. A separate external graphics accelerator is used to refresh the screen. In case of need (complicated use cases) the scaling and colorspace conversion can be done on the ARM side as well, but that is not recommened as it is not optimized.&lt;br /&gt;
A/V synchronization is done on the ARM, using an audio clock that is based on information from the audio interface.&lt;br /&gt;
&lt;br /&gt;
The communication between ARM and DSP software is provided by the TI DSP bridge. Any messages or data buffers exchanged between the ARM and DSP go through it. This layer can be regarded as transparent from Multimedia Architecture point of view and hence it will not be described in this document.&lt;br /&gt;
&lt;br /&gt;
===GStreamer===&lt;br /&gt;
GStreamer is a crossplatform media framework, covering most multimedia applications use cases from playback, to streaming and imaging. It is a huge collection of objects, interfaces, libraries and plugins. From the application point of view it is just one utility library that can be used by applications to process media streams. The library interface is actually a facade to a versatile collection of dynamic modules that implement the actual functionality. GStreamer core hides the complexity of timing issues, synchronization, buffering, threading, streaming and other functionalities that are needed to produce usable media application. &lt;br /&gt;
&lt;br /&gt;
When using GStreamer as a media playback framework, application developer is given a set of tools and building blocks for implementing the decoding engine. The framework provides actual decoding and data streaming services, but it is up to the user how to use these tools. Application logic and utilizing the services of GStreamer are tasks of the developer.&lt;br /&gt;
&lt;br /&gt;
GStreamer was chosen as a base framework on the ARM side because of the following reasons:&lt;br /&gt;
*GStreamer is a development framework for creating applications like media players, video editors, streaming media broadcasters and so on.&lt;br /&gt;
*GStreamer’s development started back in 1999 and it is relatively a long living open source project. The releases are frequent so far.&lt;br /&gt;
*There are many famous open source codecs supported by GStreamer and some example players based on GStreamer are available.&lt;br /&gt;
*GStreamer developers have a close relationship with the GNOME community, which is a potential advantage later on.&lt;br /&gt;
*GStreamer is written in C, which can be an advantage in embedded systems.&lt;br /&gt;
*GStreamer provides good modularity and flexibility.  Hence, building applications on GStreamer in short time is possible.&lt;br /&gt;
*GStreamer is LGPL and it allows Multimedia Project to combine GStreamer with proprietary software.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Public interfaces provided by GStreamer====&lt;br /&gt;
{|cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|'''Interface name'''||'''Description'''&lt;br /&gt;
|-&lt;br /&gt;
|GStreamer API||Interface for Multimedia applications, VOIP etc&lt;br /&gt;
|-&lt;br /&gt;
|playbin||Recommended high level element for playback.&lt;br /&gt;
|-&lt;br /&gt;
|uricodebin||Recommended high level element for decoding.&lt;br /&gt;
|-&lt;br /&gt;
|tagreadbin||Recommended high level element for fast metadata reading.&lt;br /&gt;
|-&lt;br /&gt;
|camerabin||Recommended high level element for camera application.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===OpenMAX IL===&lt;br /&gt;
OpenMAX is an effort to provide an industry standard for a multimedia API. The standard defines 3 layers – OpenMAX DL (Development Layer), OpenMAX IL (Integration Layer) and OpenMAX AL (Application Layer). DL is a vendor specific and optional component. IL is the layer that interfaces with IL components (e.g. codecs). We will integrate TI IL-Core for the DSP components and Bellagio IL-Core for ARM components. Neither of the cores uses DL.&lt;br /&gt;
We use GStreamer’s gomx module to transparently make OpenMAX IL components available to any GStreamer application.&lt;br /&gt;
&lt;br /&gt;
====TI OpenMAX IL Core====&lt;br /&gt;
{|cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|'''Purpose'''||OpenMAX IL Core implementation for DSP.&lt;br /&gt;
|-&lt;br /&gt;
|'''Responsibilities'''||Provides media handling services.&lt;br /&gt;
|-&lt;br /&gt;
|'''License'''||TI&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Bellagio OpenMAX IL Core====&lt;br /&gt;
{|cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|'''Purpose'''||Generic OpenMAX IL Core implementation (used on ARM side)&lt;br /&gt;
|-&lt;br /&gt;
|'''Responsibilities'''||Provides media handling services.&lt;br /&gt;
|-&lt;br /&gt;
|'''License'''||LGPL&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Imaging subsystem==&lt;br /&gt;
The multimedia framework also provides support for imaging applications. The subsystem is illustrated below.&lt;br /&gt;
&lt;br /&gt;
[[Image:Imaging_decomposition.png|800px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Camera Source===&lt;br /&gt;
The GstV4L2CamSrc is a fork of the GstV4l2Src plugin. The reason for the fork is that the original plugin has lots of extra code for handing various V4L2 devices (such as tuner crads) and that made the code quite complex.&lt;br /&gt;
&lt;br /&gt;
====GStreamer V4L2 Camera Source====&lt;br /&gt;
{|cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|'''Purpose'''||Image and Video capture&lt;br /&gt;
|-&lt;br /&gt;
|'''Responsibilities'''||Capture RAW and YUV image&lt;br /&gt;
|-&lt;br /&gt;
|'''License'''||LGPL&lt;br /&gt;
|-&lt;br /&gt;
|'''Packages'''||gstreamer0.10-plugins-camera&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Image Codecs and Filters===&lt;br /&gt;
The image encoders and decoders are wrapped under the OpenMAX IL interface [OMAX], which abstracts the codec specific implementation (which in general can run on ARM or DSP). All the image codecs will be running on the DSP side  to best exploit the HW acceleration provided by the OMAP 3430 platform. &lt;br /&gt;
The post processing filters needed for the camera application will be implemented as GStreamer elements and will run on the DSP.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Camera Daemon===&lt;br /&gt;
The camera daemon is holding imaging specific extensions to the v4l2 interface. Specifically it runs the so called 3A algorithms – AutoFocus (AF), AutoWhitebalance (AWB) and AutoExposure (AE).&lt;br /&gt;
&lt;br /&gt;
{|cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|'''Name'''||Camera Daemon&lt;br /&gt;
|-&lt;br /&gt;
|'''Purpose'''||Control imaging specific aspect not yet covered by standard v4l2&lt;br /&gt;
|-&lt;br /&gt;
|'''Responsibilities'''||Runs 3A algorithms&lt;br /&gt;
|-&lt;br /&gt;
|'''License'''||Nokia&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Public interface provided by camera daemon====&lt;br /&gt;
{|cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|'''Interface name'''||'''Description'''&lt;br /&gt;
|-&lt;br /&gt;
|V4L2 ioctl||Extensions for V4L2 protocol&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Audio Subsystem==&lt;br /&gt;
&lt;br /&gt;
[[Image:Audio_decomposition.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The audio subsystem has to take into account some requirements coming from hardware characteristics which influence the design of the software subsystem:&lt;br /&gt;
*Audio signals can be outputed through the IHF or through wired/Bluetooth headsets&lt;br /&gt;
*The loudspeaker and headphones share the same audio signal&lt;br /&gt;
*Hardware volume control is provided for both headset and for IHF, but not for microphones.&lt;br /&gt;
*Microphone selection between IHF and headset is done using an analog switch, no hardware amplification control for either.&lt;br /&gt;
&lt;br /&gt;
These aspects led to the following design choices:&lt;br /&gt;
*Audio signal routing is done using headphone and IHF amplifier volume control&lt;br /&gt;
*Microphone AGC is implemented&lt;br /&gt;
*Master volume control will correspond to&lt;br /&gt;
**IHF amplifier volume control when IHF is in use&lt;br /&gt;
**Headphone amplifier volume control when headset/headphone is in use&lt;br /&gt;
**BT headset/headphone volume setting when BT is in use&lt;br /&gt;
&lt;br /&gt;
In addition, Audio Post-Processor is always enabled. It needs different tunings for IHF, wired headset (assumed to be HS-48 like), BT headset and generic headphone.&lt;br /&gt;
&lt;br /&gt;
Alarm is played through the loudspeaker even if headphones are connected and can’t be mixed to other sounds. This is a UI requirement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Audio Codecs===&lt;br /&gt;
Most of the audio encoders and decoders are wrapped under the OpenMAX IL interface [OMAX], which abstracts the codec specific implementation (which in general can run on ARM or DSP). Unless a different solution is needed (due e.g. to sourcing problems, performance requirements or to fulfill some specific use cases) all the audio codecs will be running on the ARM side to simplify the audio architecture and to avoid the additional latency and load over the data path due to the routing of the audio data first to DSP and then back to ARM.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===ALSA library===&lt;br /&gt;
ALSA (Advanced Linux Sound Architecture) is a standard audio interface for Linux applications.&lt;br /&gt;
&lt;br /&gt;
{|cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|'''Name'''||ALSA library&lt;br /&gt;
|-&lt;br /&gt;
|'''Purpose'''||It can be used by conventional Linux applications to play/record raw audio&lt;br /&gt;
|-&lt;br /&gt;
|'''Responsibilities'''||Provides a transparent access to audio driver&lt;br /&gt;
|-&lt;br /&gt;
|'''License'''||GPL/LGPL&lt;br /&gt;
|-&lt;br /&gt;
|'''Packages'''||alsa-lib, alsa-plugins, alsa-utils&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Public interface provided by ALSA library====&lt;br /&gt;
{|cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|'''Interface name'''||'''Description'''&lt;br /&gt;
|-&lt;br /&gt;
|ALSA||Interface for Conventional Linux Audio Applications.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===PulseAudio===&lt;br /&gt;
PulseAudio is a networked sound server, similar in theory to the Enlightened Sound Daemon (ESound). PulseAudio is however much more advanced and has numerous features:&lt;br /&gt;
*Software mixing of multiple audio streams, bypassing any restrictions the hardware has. &lt;br /&gt;
*Sample rate conversion of audio streams&lt;br /&gt;
*Network transparency, allowing an application to play back or record audio on a different machine than the one it is running on. &lt;br /&gt;
*Sound API abstraction, alleviating the need for multiple backends in applications to handle the wide diversity of sound systems out there. &lt;br /&gt;
*Generic hardware abstraction, giving the possibility of doing things like individual volumes per application. &lt;br /&gt;
*PulseAudio comes with many plugin modules.&lt;br /&gt;
&lt;br /&gt;
{|cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|'''Name'''||'''PulseAudio'''&lt;br /&gt;
|-&lt;br /&gt;
|'''Purpose'''||It can be used by conventional Linux applications to play/record raw audio&lt;br /&gt;
|-&lt;br /&gt;
|'''Responsibilities'''||Provides a transparent access to audio driver and performs audio mixing and sample rate conversion.&lt;br /&gt;
|-&lt;br /&gt;
|'''License'''||GPL/LGPL&lt;br /&gt;
|-&lt;br /&gt;
|'''Packages'''||pulseaudio&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Public interface provided by PulseAudio====&lt;br /&gt;
{|cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|'''Interface name'''||'''Description'''&lt;br /&gt;
|-&lt;br /&gt;
|ESound||ESD (Enlightened Sound Daemon) is a standard audio interface for Linux applications Note: the interface is provided for backwards compatibility only. No new software should use it anymore.&lt;br /&gt;
|-&lt;br /&gt;
|PulseAudio||Internal Interface for Audio Applications (e.g. used by the GStreamer Pulse Sink and Source)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===EAP and AEP===&lt;br /&gt;
The EAP (Entertainment Audio Platform) package is used for audio post-processing (music DRC and stereo widening).  &lt;br /&gt;
&lt;br /&gt;
AEP (Audio Enhancements Package) is a full duplex speech audio enhancement package including echo cancellation, background noise suppression, DRC, AGC, etc. &lt;br /&gt;
Both EAP and AEP are implemented as a PulseAudio module.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===FMTX Middleware===&lt;br /&gt;
FMTX middleware provides a daemon for controlling the FM Transmitter. The daemon listens to commands from clients via dbus system interface. The frequency of the transmitter is controlled via Video4Linux2 interface. Note that the transmitter must be unmuted before changing frequency. This is because the device is muted by default and when the device is muted, it's not powered. Other settings are controlled by sysfs files in directory /sys/bus/i2c/devices/2-0063/.&lt;br /&gt;
&lt;br /&gt;
The wire of the headset acts as an antenna, boosting fmtx transmission power over allowed limits. Therefore the daemon is monitoring plugged devices and powers the transmitter down, if the headset is not connected.&lt;br /&gt;
GConf: system/fmtx/:&lt;br /&gt;
*Bool enabled&lt;br /&gt;
*Int frequency&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Audio/ Video Synchronization===&lt;br /&gt;
The audio / video synchronization is done using the standard mechanisms built-in to the GStreamer framework. This requires that a clock source is available. The clock must be such that it stays in sync with the audio HW. Like in normal Linux desktops, this is achieved by exporting the interrupts from the audio chip through ALSA and corresponding GStreamer element.&lt;br /&gt;
&lt;br /&gt;
==Notification subsystem==&lt;br /&gt;
MMF delivers parts of the notification mechanism. The subsytem is illustrated below:&lt;br /&gt;
&lt;br /&gt;
[[Image:Notification_decomposition.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Notification Plugins===&lt;br /&gt;
Two notification plugins are provided, &lt;br /&gt;
*Sound notification plugin: Plays events and notification sounds&lt;br /&gt;
*Vibra notification plugin: Emits bursts of vibration and controls the vibration hw.&lt;br /&gt;
&lt;br /&gt;
===Input Event Sounds===&lt;br /&gt;
The input event sounds module is using the Xserver xtest (http://www.xfree86.org/current/xtestlib.pdf) extension to produce input even feedback via libcanberra. The input-sound module is started with the XSession as a separate process.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Metadata Subsystem==&lt;br /&gt;
The multimedia framework supports the search engine when indexing media files. The subsystem is illustrated below:&lt;br /&gt;
&lt;br /&gt;
[[Image:Metadata_decomposition.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Decodebin2/TagreadBin===&lt;br /&gt;
The desktop search (Tracker) can use high level GStreamer components (decodebin2/tagreadbin) to gather metadata from all supported media files. Tagreadbin can provide better performance than playbin2 by avoiding to plug decoders and utilize special codepath in parsers and demuxer for getting only metadata.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Policy Subsystem==&lt;br /&gt;
It is neither user friendly nor always possible to run several multimedia use cases at the same time. To provide a predictable and stable behavior, multimedia components interact with a system wide policy component to keep concurrent multimedia use cases under control. The subsystem is illustrated below. The policy engine is based on the OHM framework. It is dynamically configurable with scripting and a prolog based rule database.&lt;br /&gt;
&lt;br /&gt;
[[Image:Policy_decomposition.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===libplayback===&lt;br /&gt;
libplayback is a client API that allows an application to declare its playback state. The library uses D-Bus to talk to a central component that manages the states. Media applications can use the API to synchronize their playback state. &lt;br /&gt;
&lt;br /&gt;
{|cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|'''Name'''||'''libplayback'''&lt;br /&gt;
|-&lt;br /&gt;
|'''Purpose'''||It can be used by media application to synchronize their playback state.&lt;br /&gt;
|-&lt;br /&gt;
|'''Responsibilities'''||Provides an interface for media playback management&lt;br /&gt;
|-&lt;br /&gt;
|'''License'''||Nokia&lt;br /&gt;
|-&lt;br /&gt;
|'''Packages'''||libplayback&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Public interface provided by libplayback'''&lt;br /&gt;
{|cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|'''Interface name'''||'''Description'''&lt;br /&gt;
|-&lt;br /&gt;
|DBUS API||Interface for requesting/ getting a playback state.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===OHM Ng===&lt;br /&gt;
OHM Ng is a extension on top of OHM (the open harware manager project). OMH Ng provides the policy management for the system. In Fremantle, system policy only deals with multimedia resources.&lt;br /&gt;
&lt;br /&gt;
{|cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|'''Name'''||'''OHM Ng'''&lt;br /&gt;
|-&lt;br /&gt;
|'''Purpose'''||System policy management&lt;br /&gt;
|-&lt;br /&gt;
|'''Responsibilities'''||*Receives policy requests &amp;lt;br&amp;gt; *Evaluates policy rules &amp;lt;br&amp;gt;*Notify applications of policy decisions &amp;lt;br&amp;gt;*Use available enforcement points&lt;br /&gt;
|-&lt;br /&gt;
|'''License'''||Nokia&lt;br /&gt;
|-&lt;br /&gt;
|'''Packages'''||ohm, ohm-plugins-core0, ohm-dev, ohm-dbg (includes some enforcement point plugins and libraries)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===PulseAudio Policy Enforcement Point===&lt;br /&gt;
PulseAudio plugin to manage volume levels, re-route streams and eventually forcefully shutdown streams.&lt;br /&gt;
&lt;br /&gt;
{|cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|'''Name'''||'''PulseAudio PEP'''&lt;br /&gt;
|-&lt;br /&gt;
|'''Purpose'''||Monitors headsets/ headphones connection status&lt;br /&gt;
|-&lt;br /&gt;
|'''Responsibilities'''||*Sets the correct audio routing according to the headsets / headphones connection status &amp;lt;br&amp;gt;* Sets the volume levels at device start-up and ensures it is put to a safe level when headphones are used &amp;lt;br&amp;gt;*Sets the correct tuning to Audio Post Processing and Audio Enhancement Package&lt;br /&gt;
License	Nokia&lt;br /&gt;
|-&lt;br /&gt;
|'''Packages'''||ohm, ohm-plugins-core0, ohm-dev, ohm-dbg (includes some enforcement point plugins and libraries)&lt;br /&gt;
|}&lt;/div&gt;</description>
			<pubDate>Wed, 23 Sep 2009 12:43:30 GMT</pubDate>			<dc:creator>Maemo</dc:creator>			<comments>http://bugs.maemo.com/Talk:Documentation/Maemo_5_Developer_Guide/Architecture/Multimedia_Domain</comments>		</item>
		<item>
			<title>Documentation/Maemo 5 Developer Guide/Architecture/Changes</title>
			<link>http://bugs.maemo.com/Documentation/Maemo_5_Developer_Guide/Architecture/Changes</link>
			<guid>http://bugs.maemo.com/Documentation/Maemo_5_Developer_Guide/Architecture/Changes</guid>
			<description>&lt;p&gt;Maemo:&amp;#32;/* Multimedia */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Maemo 5 platform software is based on the Debian GNU/Linux distribution. While Debian provides a significant amount of our current code base, it also defines policies for build process, packaging, file system hierarchy and other processes. &lt;br /&gt;
The intention is to follow current Debian code and processes as closely as possible, and deviate only when it is required due to technical or legal reasons. Differences between Debian and our policies and practices are documented in [Policy].&lt;br /&gt;
&lt;br /&gt;
=Architectural changes since Maemo 4=&lt;br /&gt;
&lt;br /&gt;
*OMAP3 based application processor&lt;br /&gt;
*USB flashing and charging&lt;br /&gt;
*Hardware sensors such as accelerometer and proximity&lt;br /&gt;
*Portrait mode&lt;br /&gt;
*Upstart based boot scripts&lt;br /&gt;
*OpenGL ES 2.0 Graphics acceleration&lt;br /&gt;
*IVA 2.2 Video Acceleration&lt;br /&gt;
&lt;br /&gt;
==Connectivity==&lt;br /&gt;
*BlueZ bluetooth stack updated to Bluez 4.x&lt;br /&gt;
*New Bluetooth chip driver introduced which supports BT2.1 configuration, which implies that mandatory BT2.1 features are added to the kernel and userspace BlueZ stack.&lt;br /&gt;
*WLAN architecture is changed to use the Linux mac80211 framework [mac80211], which means that the closed source WLAN UMAC component in the kernel is removed and the new WLAN kernel implementation is fully open source.&lt;br /&gt;
&lt;br /&gt;
==Multimedia==&lt;br /&gt;
* Clean split of decoders/sinks and encoders/sources&lt;br /&gt;
**Audio&lt;br /&gt;
***ARM optimised audio codecs&lt;br /&gt;
***Unmodified pulse/alsa /sink/source plugins&lt;br /&gt;
**Video&lt;br /&gt;
***DSP optimised video codecs (some via openmax)&lt;br /&gt;
&lt;br /&gt;
*PulseAudio&lt;br /&gt;
**Audio routing and policy&lt;br /&gt;
**Audio pre- &amp;amp; post processing&lt;br /&gt;
*Camera-bin&lt;br /&gt;
**High level api for still-image and video capture&lt;br /&gt;
*New GStreamer plugin introduced that wraps openmax-il components under the gstreamer API&lt;br /&gt;
*Speex introduced&lt;br /&gt;
*esound replaced by libcanberra&lt;br /&gt;
*Upgraded multimedia framework with technology novelties such as TV-out, A2DP stereo Headsets, FM-TX and expanded codec support: H.264, Mpeg-4 ASp (Xvid), WMA10.&lt;br /&gt;
&lt;br /&gt;
==UI framework==&lt;br /&gt;
*Removal of left side Task Navigator and plugins.&lt;br /&gt;
*Separate processes for status bar, home and desktop.&lt;br /&gt;
*hildon-desktop process implements window management, task launcher and task switcher. The task launcher is a menu with application icons.&lt;br /&gt;
*hildon-home process implements notification manager, desktop background and graphical widgets.&lt;br /&gt;
*hildon-status-menu process implements the status menu and status area. &lt;br /&gt;
*Removal of stylus keyboard&lt;br /&gt;
*Clutter introduced to access the hardware accelerated OpenGL graphics functionality. It is assumed that we have only one OpenGL drawing context and thus a single process running in the system is using clutter at a time. This process is hildon-desktop.&lt;br /&gt;
*UI style changes (navigation logic in applications, visual style of dialogs, menus etc)&lt;br /&gt;
&lt;br /&gt;
==RTCOM==&lt;br /&gt;
*Farsight API break: Farsight upgraded/rewritten as Farsight2&lt;br /&gt;
*Mission control: &lt;br /&gt;
*Logger API: rtcom-eventlogger introduced whose purpose is to serve as a general framework for storing and accessing a persistent log. &lt;br /&gt;
*libtelepathy replaced by telepathy-glib&lt;br /&gt;
*libgalago and galago-daemon dropped&lt;br /&gt;
&lt;br /&gt;
==Location Framework==&lt;br /&gt;
*Deprecated low level GPS libraries removed such as libgpsbt, libgpsmgr, gpsd daemon.&lt;br /&gt;
*gpsd replaced by liblocation API library and a set of on-request daemon processes for different location methods (Eg: gpypsy-daemon for bluetooth GPS, location daemon for integrated GPS and network based methods)	&lt;br /&gt;
&lt;br /&gt;
==Calendar Backend==&lt;br /&gt;
calendar-backend is a new component that provides a C++ calendar API for external applications. It interacts with SQlite database, implements the iCal RFC to store the calendar  &lt;br /&gt;
entries and handles the database transactions.&lt;br /&gt;
&lt;br /&gt;
==Media Application Framework==&lt;br /&gt;
The Media Application Framework (MAFW) provides an open, flexible and extensible layer that eases the development of multimedia applications for the Maemo platform. It is a complement to the Multimedia framework that has been heavily improved in Fremantle. MAFW provides:&lt;br /&gt;
&lt;br /&gt;
An extendable, pluggable framework interface, which allows to develop new plugins that provide integration with new multimedia services or rendering engines, that can be seamlessly integrated in all MAFW based applications.&lt;br /&gt;
Easy to use APIs that speed up application developing, providing support for playback control, discovery and browsing of multimedia resources and playlist manipulation.&lt;br /&gt;
Independence of the technology. Since MAFW is a plugin based framework, it is not tied to a particular multimedia technology (GStreamer,MPlayer, Tracker). Plugin developers have freedom to choose the technologies they want to use in their plugins, and application developers do not need to know about them.&lt;/div&gt;</description>
			<pubDate>Thu, 03 Sep 2009 14:14:48 GMT</pubDate>			<dc:creator>Maemo</dc:creator>			<comments>http://bugs.maemo.com/Talk:Documentation/Maemo_5_Developer_Guide/Architecture/Changes</comments>		</item>
		<item>
			<title>Documentation/Maemo 5 Developer Guide/Application Development/LibOSSO library</title>
			<link>http://bugs.maemo.com/Documentation/Maemo_5_Developer_Guide/Application_Development/LibOSSO_library</link>
			<guid>http://bugs.maemo.com/Documentation/Maemo_5_Developer_Guide/Application_Development/LibOSSO_library</guid>
			<description>&lt;p&gt;Maemo:&amp;#32;Created page with '= Overview =  LibOSSO is the basic library, containing required and helpful functions for Maemo applications. The full API documentation of LibOSSO is available in Doxygen format…'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
LibOSSO is the basic library, containing required and helpful functions for Maemo applications. The full API documentation of LibOSSO is available in Doxygen format.&lt;br /&gt;
&lt;br /&gt;
= Maemo initialization =&lt;br /&gt;
&lt;br /&gt;
All Maemo applications must be initialized correctly, or they do not work as expected. One symptom of missing initialization is that application starts from Task Navigator, but closes automatically after few seconds.&lt;br /&gt;
&lt;br /&gt;
Initializing application is performed with &amp;lt;code&amp;gt;osso_initialize()&amp;lt;/code&amp;gt; function. With this function, the application connects to D-BUS session bus and system bus. &amp;lt;code&amp;gt;osso_initialize()&amp;lt;/code&amp;gt; function should only be called once in the application, and the structure of type osso_context_t type that is returned should be stored for later use. First parameter of the function is the application D-BUS name, used also in application D-BUS service file. Second parameter is the application version as a string. Third is the activation type, with TRUE the library assumes that the application binary has been launched by the D-BUS daemon, and thus connects to the D-BUS activation bus. Fourth parameter is the GLib main-loop context to connect to, NULL should be used for the default context. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;''osso_context_t * osso_initialize(const gchar *application, const gchar* version, gboolean activation, GMainContext *context)''&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; When the application is closing, osso_deinitialize function should be called to close the message bus connection and free all memory allocated by the library. &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;''void osso_deinitialize(osso_context_t *osso)''&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Below is an example ([https://garage.maemo.org/svn/maemoexamples/trunk/maemo-examples/example_libosso.c example_libosso.c]) of this; if the initialization does not succeed, the function returns NULL.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000080&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;#define&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; OSSO_EXAMPLE_NAME    &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;example_libosso&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000080&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;#define&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; OSSO_EXAMPLE_SERVICE &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;org.maemo.&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;OSSO_EXAMPLE_NAME&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* ... */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
     osso_context_t &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;osso_context&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* ... */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Initialize maemo application */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
     osso_context &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;osso_initialize&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;OSSO_EXAMPLE_SERVICE&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;0.0.1&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; TRUE&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; NULL&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Check that initialization was ok */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;if&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;osso_context &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;==&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; NULL&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
         &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;return&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; OSSO_ERROR&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* ... */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Deinitialize OSSO */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;osso_deinitialize&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;osso_context&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Remote process messages =&lt;br /&gt;
&lt;br /&gt;
System wide messages in Maemo platform are handled with D-BUS system messaging, which is a Remote Process Communication (RPC) method. LibOSSO has own wrappers to normal D-BUS functions to make usage simpler and to maintain backward compatibility. By using D-BUS, applications can send messages from one process to another.&lt;br /&gt;
&lt;br /&gt;
Callback function receiving the messages can be as follows ([https://garage.maemo.org/svn/maemoexamples/trunk/maemo-examples/example_libosso.c example_libosso.c]), where AppData structure contains the initialized osso_context:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000080&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;#include&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;amp;lt;hildon/hildon-program.h&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000080&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;#include&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;amp;lt;hildon/hildon-banner.h&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000080&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;#include&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;amp;lt;gtk/gtk.h&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000080&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;#include&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;amp;lt;libosso.h&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000080&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;#define&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; OSSO_EXAMPLE_NAME    &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;example_libosso&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000080&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;#define&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; OSSO_EXAMPLE_SERVICE &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;org.maemo.&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;OSSO_EXAMPLE_NAME&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000080&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;#define&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; OSSO_EXAMPLE_OBJECT  &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;/org/maemo/&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;OSSO_EXAMPLE_NAME&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000080&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;#define&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; OSSO_EXAMPLE_IFACE   &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;org.maemo.&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;OSSO_EXAMPLE_NAME&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* ... */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Application UI data struct */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;typedef&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;struct&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;_AppData&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; AppData&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;struct&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;_AppData&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     HildonProgram &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;program&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     HildonWindow &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;window&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     osso_context_t &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;osso_context&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* ... */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Callback for normal D-BUS messages */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 gint &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;dbus_req_handler&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;const&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; gchar &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; interface&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;const&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; gchar &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; method&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                       GArray &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; arguments&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; gpointer data&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                       osso_rpc_t &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; retval&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     AppData &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;appdata&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     appdata &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;AppData &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*)&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; data&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;osso_system_note_infoprint&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;appdata&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;-&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;osso_context&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; method&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; retval&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;osso_rpc_free_val&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;retval&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;return&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; OSSO_OK&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To attach this callback function to receive all the normal D-BUS messages to the application, use the osso_rpc_set_default_cb_f function as follows:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;int&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;main&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;int&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; argc&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;char&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;argv&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;[])&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     osso_return_t result&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
     &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* ... */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Add handler for session bus D-BUS messages */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
     result &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;osso_rpc_set_cb_f&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;appdata&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;-&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;osso_context&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                                OSSO_EXAMPLE_SERVICE&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                                OSSO_EXAMPLE_OBJECT&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                                OSSO_EXAMPLE_IFACE&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                                dbus_req_handler&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; appdata&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
     &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;if&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;result &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;!=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; OSSO_OK&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
         &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_print&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;Error setting D-BUS callback (%d)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#CC33CC&amp;quot;&amp;gt;\n&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; result&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
         &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;return&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; OSSO_ERROR&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* ... */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
     &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Deinitialize OSSO */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;osso_deinitialize&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;osso_context&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now the application is ready to receive D-BUS messages. Whenever it receives one, the dbus_req_handler function is called to process the message. Another test application ([https://garage.maemo.org/svn/maemoexamples/trunk/maemo-examples/example_message.c example_message.c]&amp;lt;nowiki&amp;gt;), can send the ``HelloWorld'' that this application was designed to handle, as follows: &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* ... */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000080&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;#define&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; OSSO_EXAMPLE_NAME    &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;example_libosso&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000080&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;#define&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; OSSO_EXAMPLE_SERVICE &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;org.maemo.&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;OSSO_EXAMPLE_NAME&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000080&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;#define&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; OSSO_EXAMPLE_OBJECT  &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;/org/maemo/&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;OSSO_EXAMPLE_NAME&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000080&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;#define&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; OSSO_EXAMPLE_IFACE   &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;org.maemo.&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;OSSO_EXAMPLE_NAME&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000080&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;#define&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; OSSO_EXAMPLE_MESSAGE &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;HelloWorld&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* ... */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 ret &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;osso_rpc_run&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;osso_context&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                    OSSO_EXAMPLE_SERVICE&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                    OSSO_EXAMPLE_OBJECT&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                    OSSO_EXAMPLE_IFACE&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                    OSSO_EXAMPLE_MESSAGE&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;amp;amp;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;retval&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; DBUS_TYPE_INVALID&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* ... */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt; When example_libosso_test is started, it sends an ``example_message'' D-BUS message to org.maemo.example_libosso service, attached to the example_libosso application (See more about D-BUS service files from an earlier section). Now when example_libosso receives the message, it shows a banner. &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
One nice thing about D-BUS is that the receiving application does not even need to be started: D-BUS can automatically start the application based on its service file, and then pass the message to it!&lt;br /&gt;
&lt;br /&gt;
=Hardware state messages =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt; Maemo applications can connect to listen the system D-BUS messages, like ``battery low'' and ``shutdown''. When these messages are received, the application may want to ask the user to save files that are open, or react however wanted. &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A callback function is defined like below, taking &amp;lt;code&amp;gt;osso_hw_state_t&amp;lt;/code&amp;gt; and gpointer as parameters. The changed state can be gotten from state variable ([https://garage.maemo.org/svn/maemoexamples/trunk/maemo-examples/example_libosso.c &amp;lt;code&amp;gt;example_libosso.c&amp;lt;/code&amp;gt;]).&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Callback for hardware D-BUS events */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;void&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;hw_event_handler&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;osso_hw_state_t &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;state&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; gpointer data&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     AppData &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;appdata&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     appdata &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;AppData &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*)&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; data&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;if&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;state&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;-&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;shutdown_ind&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
         &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;hildon_banner_show_information&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;GTK_WIDGET&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;appdata&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;-&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;window&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;),&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; NULL&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                                        &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;Shutdown event!&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;if&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;state&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;-&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;memory_low_ind&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
         &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;hildon_banner_show_information&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;GTK_WIDGET&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;appdata&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;-&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;window&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;),&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; NULL&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                                        &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;Memory low event!&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;if&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;state&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;-&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;save_unsaved_data_ind&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
         &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;hildon_banner_show_information&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;GTK_WIDGET&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;appdata&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;-&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;window&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;),&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; NULL&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                                        &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;Must save unsaved data event!&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;if&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;state&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;-&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;system_inactivity_ind&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
         &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;hildon_banner_show_information&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;GTK_WIDGET&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;appdata&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;-&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;window&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;),&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; NULL&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                                        &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;Minimize application inactivity event!&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To attach this handler, e.g. in application &amp;lt;code&amp;gt;main()&amp;lt;/code&amp;gt;, use &amp;lt;code&amp;gt;osso_hw_set_event_cb()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tt&amp;gt;    &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* ... */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
     &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Add handler for hardware D-BUS messages */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
     result &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;osso_hw_set_event_cb&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; appdata&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;-&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;osso_context&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
         NULL&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; hw_event_handler&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;gpointer&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; appdata &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
     &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;if&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;result &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;!=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; OSSO_OK&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
         &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_print&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;Error setting HW state callback (%d)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#CC33CC&amp;quot;&amp;gt;\n&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; result&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
         &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;return&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; OSSO_ERROR&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
     &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* ... */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''N.B.''' These hardware events are not sent to the SDK, so testing them is only possible in Maemo device.&lt;br /&gt;
&lt;br /&gt;
= System Exit message =&lt;br /&gt;
&lt;br /&gt;
A system message is sent when applications are required to close themselves. Its callback is: ([https://garage.maemo.org/svn/maemoexamples/trunk/maemo-examples/example_libosso.c example_libosso.c]):&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Callback for exit D-BUS event */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;void&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;exit_event_handler&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;gboolean die_now&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; gpointer data&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     AppData &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;appdata&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     appdata &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;AppData &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*)&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; data&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_print&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;exit_event_handler called&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#CC33CC&amp;quot;&amp;gt;\n&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Do whatever application needs to do before exiting */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;hildon_banner_show_information&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;GTK_WIDGET&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;appdata&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;-&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;window&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;),&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; NULL&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                                    &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;Exiting...&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The callback is set (e.g. in application main) as follows.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;int&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;main&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;int&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; argc&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;char&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; argv&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;[]&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* ... */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Add handler for Exit D-BUS messages */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
     result &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;osso_application_set_exit_cb&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;appdata&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;-&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;osso_context&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                                           exit_event_handler&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                                           &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;gpointer&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; appdata&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;if&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;result &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;!=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; OSSO_OK&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
         &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_print&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;Error setting exit callback (%d)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#CC33CC&amp;quot;&amp;gt;\n&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; result&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
         &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;return&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; OSSO_ERROR&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* ... */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now whenever the system needs to close an application for any reason, the close is performed gracefully.&lt;br /&gt;
&lt;br /&gt;
= Application state saving and auto save =&lt;br /&gt;
&lt;br /&gt;
State saving is a special feature of the Maemo platform. It means that applications save their running state from RAM to permanent memory, such as flash memory, and then end the running application process. This state saving happens when switching out from the application and the device memory is running low. When the user then returns to a backgrounded application, the application restarts, the application state is read from flash memory, and the user does not even know that the application was not running all the time.&lt;br /&gt;
&lt;br /&gt;
Auto saving is an addition to state saving for editor-like applications containing user data. This data/document is automatically saved at the same time with state save. The main difference is that the application state is usually just a small amount of variables describing the state where the application was, whereas the auto-saved file can be any file the user was editing. Auto saving guarantees that user files are not lost when e.g. the battery runs out.&lt;br /&gt;
&lt;br /&gt;
Information on how to implement state saving can be found in LibOSSO API document.&lt;/div&gt;</description>
			<pubDate>Wed, 02 Sep 2009 14:05:09 GMT</pubDate>			<dc:creator>Maemo</dc:creator>			<comments>http://bugs.maemo.com/Talk:Documentation/Maemo_5_Developer_Guide/Application_Development/LibOSSO_library</comments>		</item>
		<item>
			<title>Documentation/Maemo 5 Developer Guide/Application Development/MIME type mapping</title>
			<link>http://bugs.maemo.com/Documentation/Maemo_5_Developer_Guide/Application_Development/MIME_type_mapping</link>
			<guid>http://bugs.maemo.com/Documentation/Maemo_5_Developer_Guide/Application_Development/MIME_type_mapping</guid>
			<description>&lt;p&gt;Maemo:&amp;#32;Created page with '= MIME types mapping =  MIME types mapping specifies for the platform which application should handle a given MIME type. A mapping has to be defined in the desktop file of the ap…'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= MIME types mapping =&lt;br /&gt;
&lt;br /&gt;
MIME types mapping specifies for the platform which application should handle a given MIME type. A mapping has to be defined in the desktop file of the application by adding to it the MimeType field.&lt;br /&gt;
&lt;br /&gt;
An [https://garage.maemo.org/svn/maemoexamples/trunk/maemo-examples/example_libosso.desktop example_libosso.desktop] file for the application looks like the following:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;[Desktop Entry]&lt;br /&gt;
 Encoding=UTF-8&lt;br /&gt;
 Version=1.0&lt;br /&gt;
 Type=Application&lt;br /&gt;
 Name=Example libOSSO&lt;br /&gt;
 Exec=/usr/bin/example_libosso&lt;br /&gt;
 X-Osso-Service=org.maemo.example_libosso&lt;br /&gt;
 Icon=qgn_list_gene_default_app&lt;br /&gt;
 MimeType=application/x-example;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt; The last line is the most important one, and specifies that this application can handle the MIME type ``application/x-example''. &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=New MIME type with OSSO category extension =&lt;br /&gt;
&lt;br /&gt;
If the application is introducing a new MIME type to the system, it is necessary to provide the mime-info XML (see more at http://standards.freedesktop.org/shared-mime-info-spec/) that defines it, in this case an example-mime.xml file for the application looks as follows:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000080&amp;quot;&amp;gt;&amp;amp;lt;?xml&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;version&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;1.0&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;encoding&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;UTF-8&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000080&amp;quot;&amp;gt;?&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;&amp;amp;lt;mime-info&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;xmlns&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;http://www.freedesktop.org/standards/shared-mime-info&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
            &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;xmlns:osso&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;http://nokia.com/osso/mime-categories&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;&amp;amp;lt;mime-type&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;type&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;application/x-example&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&lt;br /&gt;
         &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;&amp;amp;lt;comment&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;Example application file&amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;&amp;amp;lt;/comment&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&lt;br /&gt;
         &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;&amp;amp;lt;osso:category&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;name&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;images&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;/&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&lt;br /&gt;
         &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;&amp;amp;lt;magic&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;priority&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;50&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&lt;br /&gt;
                &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;&amp;amp;lt;match&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;type&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;string&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;value&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;FOO&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;offset&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;0&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;/&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&lt;br /&gt;
         &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;&amp;amp;lt;/magic&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&lt;br /&gt;
         &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;&amp;amp;lt;glob&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;pattern&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;*.foo&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;/&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;&amp;amp;lt;/mime-type&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;&amp;amp;lt;/mime-info&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt; This entry maps one extension and a ``magic'' string to the ``application/x-example'' MIME type. &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''N.B.''' The glob pattern should be given in lowercase.&lt;br /&gt;
&lt;br /&gt;
= What is OSSO category =&lt;br /&gt;
&lt;br /&gt;
The platform has a notion of file categories for the user's data files. The available categories are:&lt;br /&gt;
&lt;br /&gt;
* Bookmarks&lt;br /&gt;
* Contacts&lt;br /&gt;
* Documents&lt;br /&gt;
* Emails&lt;br /&gt;
* Images&lt;br /&gt;
* Audio&lt;br /&gt;
* Video&lt;br /&gt;
* Other&lt;br /&gt;
&lt;br /&gt;
A mapping is set up between categories and MIME types, so that the MIME type of a file determines its category. The MIME type setup is handled by the shared-mime-info infrastructure, and the category information is added to that same framework.&lt;br /&gt;
&lt;br /&gt;
Adding a mapping between a category and a number of MIME types is performed much like adding or editing the supported MIME types in the system.&lt;br /&gt;
&lt;br /&gt;
Each application or library that adds a category mapping should add a file in&lt;br /&gt;
&lt;br /&gt;
 /usr/share/mime/packages/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The file format is the same XML format used for MIME types, with an added tag ``  8.7.3 Updating platform databases&lt;br /&gt;
&lt;br /&gt;
To introduce the newly defined MIME type(s) to the platform, do the following:&lt;br /&gt;
&lt;br /&gt;
# Copy the mime-information XML under /usr/share/mime/packages: &lt;br /&gt;
 &lt;br /&gt;
 [sbox-FREMANTLE_X86: ~] &amp;amp;gt; cp example-mime.xml /usr/share/mime/packages&lt;br /&gt;
&lt;br /&gt;
# Update the MIME and desktop database: &lt;br /&gt;
 &lt;br /&gt;
 [sbox-FREMANTLE_X86: ~] &amp;amp;gt; update-mime-database /usr/share/mime&lt;br /&gt;
 [sbox-FREMANTLE_X86: ~] &amp;amp;gt; update-desktop-database /usr/share/applications&lt;br /&gt;
&lt;br /&gt;
# Update the OSSO category database: &lt;br /&gt;
 &lt;br /&gt;
 [sbox-FREMANTLE_X86: ~] &amp;amp;gt; hildon-update-category-database /usr/share/mime&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To remove the MIME from the platform, delete the XML file in /usr/share/mime/packages/ and update the databases as above.&lt;br /&gt;
&lt;br /&gt;
= Registering MIME type with package =&lt;br /&gt;
&lt;br /&gt;
Because most of the applications are installed on the platform via pre-compiled packages, the MIME type registration has to be performed as well.&lt;br /&gt;
&lt;br /&gt;
The steps are similar to the ones shown above.&lt;br /&gt;
&lt;br /&gt;
To install the MIME information XML under /usr/share/mime/packages, edit the package rules and install the files. In this case it looks as follows:&lt;br /&gt;
&lt;br /&gt;
* in the '''rules''' file under install section, add the following lines:&lt;br /&gt;
 &amp;lt;tt&amp;gt;mkdir -p &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;$(CURDIR)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;/debian/tmp/usr/share/mime/packages&lt;br /&gt;
 cp &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;$(CURDIR)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;/example-mime&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;.&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;xml &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;$(CURDIR)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;/debian/tmp/usr/share/mime/packages&amp;lt;/tt&amp;gt;&lt;br /&gt;
* and in .install we need to add&lt;br /&gt;
 &amp;lt;tt&amp;gt;usr/share/mime/packages/example-mime&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;.&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;xml&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This way, it can be assured that the mime information XML is being installed under /usr/share/mime/packages.&lt;br /&gt;
&lt;br /&gt;
Add the following lines to both the postinst and postrm files of the package:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;if&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;[&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; -x /usr/bin/update-mime-database &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;];&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;then&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&lt;br /&gt;
  update-mime-database /usr/share/mime&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;fi&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;if&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;[&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; -x /usr/bin/update-desktop-database &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;];&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;then&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&lt;br /&gt;
  update-desktop-database /usr/share/applications&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;fi&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;if&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;[&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; -x /usr/bin/hildon-update-category-database &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;];&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;then&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&lt;br /&gt;
  hildon-update-category-database /usr/share/mime&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;fi&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This keeps the platform mime information and OSSO category databases up-to-date.&lt;/div&gt;</description>
			<pubDate>Wed, 02 Sep 2009 14:01:57 GMT</pubDate>			<dc:creator>Maemo</dc:creator>			<comments>http://bugs.maemo.com/Talk:Documentation/Maemo_5_Developer_Guide/Application_Development/MIME_type_mapping</comments>		</item>
		<item>
			<title>Documentation/Maemo 5 Developer Guide/Using Data Sharing/Clipboard Usage</title>
			<link>http://bugs.maemo.com/Documentation/Maemo_5_Developer_Guide/Using_Data_Sharing/Clipboard_Usage</link>
			<guid>http://bugs.maemo.com/Documentation/Maemo_5_Developer_Guide/Using_Data_Sharing/Clipboard_Usage</guid>
			<description>&lt;p&gt;Maemo:&amp;#32;/* Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Overview=&lt;br /&gt;
&lt;br /&gt;
In maemo, there is a number of clipboard enhancements to the X clipboard and Gtk+, in order to&lt;br /&gt;
&lt;br /&gt;
* Support retaining the clipboard data when applications that own the clipboard exit.&lt;br /&gt;
* Be able to copy and paste rich text data between Gtk+ text views in different applications.&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;Provide a generally more pleasant user experience; make it easy for application developers to gray out ``Paste'' menu items when the clipboard data format is not supported by the application. &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This section uses the following example code:&lt;br /&gt;
* [https://garage.maemo.org/svn/maemoexamples/trunk/maemopad/src/ maemopad]&lt;br /&gt;
&lt;br /&gt;
=GtkClipboard API changes =&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tt&amp;gt;gboolean &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;gtk_clipboard_set_can_store&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;GtkClipboard   &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;clipboard&lt;br /&gt;
                                       GtkTargetEntry &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;targets&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                                       gint            n_targets&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This function sets what data targets the current clipboard owner can transfer to the clipboard manager. NULL can be passed as targets, together with 0 as n_targets to indicate that all targets can be transferred.&lt;br /&gt;
&lt;br /&gt;
When the clipboard owner changes, these values are reset.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;void&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;gtk_clipboard_store&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;GtkClipboard &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;clipboard&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This function tells the clipboard to try and store the contents of the targets specified using gtk_clipboard_set_can_store. If no such call has been made, or if there is no clipboard manager around, this function is simply a no-op.&lt;br /&gt;
&lt;br /&gt;
Applications can call this function when exiting, but it is called automatically, when the application is quitting, if quitting with gtk_main_quit(). If the application is not the owner of the clipboard, the function will simply be a no-op.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt; In addition, adding a convenience function for finding out if a target is supported (in order to be able to gray out ``Paste'' items, if none of the existing clipboard targets are supported) &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tt&amp;gt;gboolean &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;gtk_clipboard_wait_is_target_available&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;GtkClipboard &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;clipboard&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                                                  GdkAtom       target&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= GtkTextBuffer API changes =&lt;br /&gt;
&lt;br /&gt;
In order to support rich text copy and paste, some new functions were introduced:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;void&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;gtk_text_buffer_set_enable_paste_rich_text&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;GtkTextBuffer &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;buffer&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                                             gboolean       can_paste_rich_text&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 gboolean&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;gtk_text_buffer_get_enable_paste_rich_text&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;GtkTextBuffer &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;buffer&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The setter function toggles, whether it should be possible to paste rich text in a text buffer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt; To prevent applications from getting confused, when text with unexpected tags is pasted to a buffer, the notion of ``rich text format'' was added: &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;void&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;gtk_text_buffer_set_rich_text_format&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;GtkTextBuffer &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;buffer&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                                       &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;const&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; gchar   &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;format&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 G_CONST_RETURN &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;gtk_text_buffer_get_rich_text_format&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;GtkTextBuffer &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;buffer&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt; When a buffer has a certain text format, it can only paste rich text from buffers that have the same text format. If the formats differ, only plain text will be pasted. If a buffer has its format set to NULL, it means that it can paste from any format. For example, a format called ``html'' could include the tags ``bold'', ``italic'' etc. Thus, it would only be possible to paste text from buffers having the same format specified. &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''N.B.''' The string is just an identifier. It is up to the application developers to make sure that when specifying an application as supporting a certain format, also the tags in the buffer are specified for that format.&lt;br /&gt;
&lt;br /&gt;
For further details, MaemoPad source code is a good example to study.&lt;/div&gt;</description>
			<pubDate>Wed, 02 Sep 2009 13:35:06 GMT</pubDate>			<dc:creator>Maemo</dc:creator>			<comments>http://bugs.maemo.com/Talk:Documentation/Maemo_5_Developer_Guide/Using_Data_Sharing/Clipboard_Usage</comments>		</item>
		<item>
			<title>Documentation/Maemo 5 Developer Guide/Using Generic Platform Components/Application Preferences-Gconf</title>
			<link>http://bugs.maemo.com/Documentation/Maemo_5_Developer_Guide/Using_Generic_Platform_Components/Application_Preferences-Gconf</link>
			<guid>http://bugs.maemo.com/Documentation/Maemo_5_Developer_Guide/Using_Generic_Platform_Components/Application_Preferences-Gconf</guid>
			<description>&lt;p&gt;Maemo:&amp;#32;/* Application Preferences - GConf */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Application Preferences - GConf=&lt;br /&gt;
&lt;br /&gt;
GConf is used by the GNOME desktop environment for storing shared configuration settings for the desktop and applications. The daemon process GConfd follows the changes in the database. When a change occurs in the database, the daemon applies the new settings to the applications using them. For example, the control panel application uses GConf.&lt;br /&gt;
&lt;br /&gt;
If settings are used only by a single application, Glib utility for .ini style files should be used instead. Applications should naturally have working default settings. Settings should be saved only when the user changes them. &lt;br /&gt;
&lt;br /&gt;
This chapter uses the following example:&lt;br /&gt;
*[https://garage.maemo.org/svn/maemoexamples/trunk/support-libraries/hildon_helloworld-9.c hildon_helloworld-9.c]&lt;br /&gt;
*[https://garage.maemo.org/svn/maemoexamples/trunk/gconf-listener/ gconf-listener]&lt;br /&gt;
&lt;br /&gt;
==GConf Basics==&lt;br /&gt;
&lt;br /&gt;
GConf is a system for GNOME applications to store settings into a database system in a centralized manner. The aim of the GConf library is to provide applications a consistent view of the database access functions, as well as to provide tools for system administrators to enable them to distribute software settings in a centralized manner (across multiple computers).&lt;br /&gt;
&lt;br /&gt;
The GConf &amp;quot;database&amp;quot; may consist of multiple databases (configured by the system administrator), but normally there will be at least one database engine that uses XML to store settings. This keeps the database still in a human readable form (as opposed to binary), and allows some consistency checks via schema verifications.&lt;br /&gt;
&lt;br /&gt;
The interface for the client (program that uses GConf to store its settings) is always the same, irrespective of the database back-end (the client does not see this).&lt;br /&gt;
&lt;br /&gt;
What makes GConf interesting, is its capability of notifying running clients that their settings have been changed by some other process than themselves. This allows for the clients to react soon (not quite real-time), and this leads to a situation where a user will change, for example, the GNOME HTTP proxy settings, and clients that are interested in that setting will get a notification (via a callback function) that the setting has changed. The clients will then read the new setting and modify their data structures to take the new setting into account.&lt;br /&gt;
&lt;br /&gt;
==Using GConf ==&lt;br /&gt;
&lt;br /&gt;
The GConf model consists of two parts: the GConf client library (which will be used here) and the GConf server daemon that is the guardian and reader/writer of the back-end databases. In a regular GNOME environment, the client communicates with the server either by using the Bonobo library (lightweight object IPC mechanism) or D-Bus.&lt;br /&gt;
&lt;br /&gt;
As Bonobo is not used in maemo (it is quite heavy, even if lightweight), the client will communicate with the server using D-Bus. This also allows the daemon to be started on demand, when there is at least one client wanting to use that service (this is a feature of D-Bus). The communication mechanism is encapsulated by the GConf client library, and as such, will be transparent.&lt;br /&gt;
&lt;br /&gt;
In order to read or write the preference database, it is necessary to decide on the key to use to access the application values. The database namespace is hierarchical, and uses the '/'-character to implement this hierarchy, starting from a root location similar to UNIX file system namespace.&lt;br /&gt;
&lt;br /&gt;
Each application will use its own &amp;quot;directory&amp;quot; under '''/apps/Maemo/appname/'''. N.B. Even when the word &amp;quot;directory&amp;quot; is seen in connection to GConf, one has to be careful to distinguish '''real directories''' from '''preference namespaces''' inside the GConf namespace. The /apps/Maemo/appname/ above is in the GConf namespace, so there will not actually be a physical directory called '''/apps/''' on a system.&lt;br /&gt;
&lt;br /&gt;
The keys should be named according to the platform guidelines. The current guideline is that each application should store its configuration keys under '''/apps/Maemo/appname/''', where appname is the name of the application. There is no central registry on the names in use currently, so names should be selected carefully. Key names should all be lowercase, with underscore used to separate multiple words. Also, ASCII should be used, since GConf does not support localization for key names (it does for key values, but that is not covered in this material).&lt;br /&gt;
&lt;br /&gt;
GConf values are typed, which means that it is necessary to select the type for the data that the key is supposed to hold.&lt;br /&gt;
&lt;br /&gt;
The following types are supported for values in GConf:&lt;br /&gt;
&lt;br /&gt;
* gint (32-bit signed)&lt;br /&gt;
* gboolean&lt;br /&gt;
* gchar (ASCII/ISO 8859-1/UTF-8 C string)&lt;br /&gt;
* gfloat (with the limitation that the resolution is not guaranteed nor specified by GConf because of portability issues)&lt;br /&gt;
* a list of values of one type&lt;br /&gt;
* a pair of values, each having their own type (useful for storing &amp;quot;mapping&amp;quot; data)&lt;br /&gt;
&lt;br /&gt;
What is missing from the above list is storing binary data (for a good reason). The type system is also fairly limited. This is on purpose, so that complex configurations (like the Apache HTTP daemon uses, or Samba) are not attempted using GConf.&lt;br /&gt;
&lt;br /&gt;
There is a diagnostic and administration tool called gconftool-2 that is also available in the SDK. It can be used to set and unset keys, as well as display their current contents.&lt;br /&gt;
&lt;br /&gt;
Some examples of using gconftool-2 (on the SDK):&lt;br /&gt;
&lt;br /&gt;
* Displaying the contents of all keys stored under '''/apps/''' (listing cut for brevity) &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 [sbox-DIABLO_X86: ~] &amp;amp;gt; run-standalone.sh gconftool-2 -R /apps&lt;br /&gt;
  /apps/osso:&lt;br /&gt;
   /apps/osso/inputmethod:&lt;br /&gt;
    launch_finger_kb_on_select = true&lt;br /&gt;
    input_method_plugin = himExample_vkb&lt;br /&gt;
    available_languages = [en_GB]&lt;br /&gt;
    use_finger_kb = true&lt;br /&gt;
    /apps/osso/inputmethod/hildon-im-languages:&lt;br /&gt;
     language-0 = en_GB&lt;br /&gt;
     current = 0&lt;br /&gt;
     language-1 =&lt;br /&gt;
     list = []&lt;br /&gt;
   /apps/osso/fontconfig:&lt;br /&gt;
    font_scaling_factor = Schema (type: `float' list_type:&lt;br /&gt;
     '*invalid*' car_type: '*invalid*' cdr_type: '*invalid*'&lt;br /&gt;
     locale: `C')&lt;br /&gt;
   /apps/osso/apps:&lt;br /&gt;
    /apps/osso/apps/controlpanel:&lt;br /&gt;
     groups = [copa_ia_general,copa_ia_connectivity,&lt;br /&gt;
               copa_ia_personalisation]&lt;br /&gt;
     icon_size = false&lt;br /&gt;
     group_ids = [general,connectivity,personalisation]&lt;br /&gt;
   /apps/osso/osso:&lt;br /&gt;
    /apps/osso/osso/thumbnailers:&lt;br /&gt;
     /apps/osso/osso/thumbnailers/audio@x-mp3:&lt;br /&gt;
      command = /usr/bin/hildon-thumb-libid3&lt;br /&gt;
     /apps/osso/osso/thumbnailers/audio@x-m4a:&lt;br /&gt;
      command = /usr/bin/hildon-thumb-libid3&lt;br /&gt;
     /apps/osso/osso/thumbnailers/audio@mp3:&lt;br /&gt;
      command = /usr/bin/hildon-thumb-libid3&lt;br /&gt;
     /apps/osso/osso/thumbnailers/audio@x-mp2:&lt;br /&gt;
      command = /usr/bin/hildon-thumb-libid3&lt;br /&gt;
&lt;br /&gt;
* Creating and setting the value to a new key. &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 [sbox-DIABLO_X86: ~] &amp;amp;gt; run-standalone.sh gconftool-2  \&lt;br /&gt;
  --set /apps/Maemo/testing/testkey --type=int 5&lt;br /&gt;
&lt;br /&gt;
* Listing all keys under the namespace '''/apps/Maemo/testing'''. &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 [sbox-DIABLO_X86: ~] &amp;amp;gt; run-standalone.sh gconftool-2  \&lt;br /&gt;
  -R /apps/Maemo/testing&lt;br /&gt;
  testkey = 5&lt;br /&gt;
&lt;br /&gt;
* Removing the last key will also remove the key directory. &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 [sbox-DIABLO_X86: ~] &amp;amp;gt; run-standalone.sh gconftool-2  \&lt;br /&gt;
  --unset /apps/Maemo/testing/testkey&lt;br /&gt;
 [sbox-DIABLO_X86: ~] &amp;amp;gt; run-standalone.sh gconftool-2  \&lt;br /&gt;
  -R /apps/Maemo/testing&lt;br /&gt;
&lt;br /&gt;
* Removing whole key hierarchies is also possible. &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 [sbox-DIABLO_X86: ~] &amp;amp;gt; run-standalone.sh gconftool-2  \&lt;br /&gt;
  --recursive-unset /apps/Maemo/testing&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For more detailed information, please see [http://maemo.org/api_refs/5.0/beta/gconf2/ Gconf API documentation].&lt;br /&gt;
&lt;br /&gt;
==  Using GConf to read and write preferences ==&lt;br /&gt;
&lt;br /&gt;
Section ''Application Settings'' [/node9.html#sec:application_settings [[Image:crossref.png|[*]]]] of chapter ''Application Development'' in Maemo Reference Manual presents a short introductory example of gconf usage. The following example is a bit more complicated.&lt;br /&gt;
&lt;br /&gt;
The example is required to:&lt;br /&gt;
&lt;br /&gt;
* Store the color that the user selects when the color button (in the toolbar) is used.&lt;br /&gt;
* Load the color preference on application startup.&lt;br /&gt;
&lt;br /&gt;
Even if GConf concepts seem to be logical, it can be seen that using GConf will require one to learn some new things (e.g. the GError-object). Since the GConf client code is in its own library, the relevant compiler flags and library options need to be added again. The pkg-config package name is gconf-2.0 hildon_helloworld-9.c&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/**&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * hildon_helloworld-9.c&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; *&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * This maemo code example is licensed under a MIT-style license,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * that can be found in the file called &amp;quot;License&amp;quot; in the same&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * directory as this file.&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * Copyright (c) 2007-2008 Nokia Corporation. All rights reserved.&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; *&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * We'll store the color that the user selects into a GConf&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * preference. In fact, we'll have three settings, one for each&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * channel of the color (red, green and blue).&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; *&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * Look for lines with &amp;quot;NEW&amp;quot; or &amp;quot;MODIFIED&amp;quot; in them.&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000080&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;#include&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;amp;lt;stdlib.h&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000080&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;#include&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;amp;lt;hildon/hildon-program.h&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000080&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;#include&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;amp;lt;hildon/hildon-color-button.h&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000080&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;#include&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;amp;lt;hildon/hildon-find-toolbar.h&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000080&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;#include&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;amp;lt;hildon/hildon-file-chooser-dialog.h&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000080&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;#include&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;amp;lt;hildon/hildon-banner.h&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000080&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;#include&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;amp;lt;libgnomevfs/gnome-vfs.h&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Include the prototypes for GConf client functions (NEW). */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000080&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;#include&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;amp;lt;gconf/gconf-client.h&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* The application name -part of the GConf namespace (NEW). */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000080&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;#define&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; APP_NAME &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;hildon_hello&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* This will be the root &amp;quot;directory&amp;quot; for our preferences (NEW). */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000080&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;#define&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; GC_ROOT  &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;/apps/Maemo/&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; APP_NAME &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;/&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/*... Listing cut for brevity ...*/&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/**&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * NEW&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; *&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * Utility function to store the given color into our application&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * preferences. We could use a list of integers as well, but we'll&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * settle for three separate properties; one for each of RGB&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * channels.&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; *&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * The config keys that will be used are 'red', 'green' and 'blue'.&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; *&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * NOTE:&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; *   We're doing things very non-optimally. If our application would&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; *   have multiple preference settings, and we would like to know&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; *   when someone will change them (external program, another&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; *   instance of our program, etc), we'd have to keep a reference to&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; *   the GConf client connection. Listening for changes in&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; *   preferences would also require a callback registration, but this&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; *   is covered in the &amp;quot;maemo Platform Development&amp;quot; material.&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;static&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;void&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;confStoreColor&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;const&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; GdkColor&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; color&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* We'll store the pointer to the GConf connection here. */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
   GConfClient&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; gcClient &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; NULL&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Make sure that no NULLs are passed for the color. GdkColor is&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;     not a proper GObject, so there is no GDK_IS_COLOR macro. */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_assert&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;color&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_print&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;confStoreColor: invoked&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#CC33CC&amp;quot;&amp;gt;\n&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Open a connection to gconfd-2 (via D-Bus in maemo). The GConf&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;     API doesn't say whether this function can ever return NULL or&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;     how it will behave in error conditions. */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
   gcClient &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;gconf_client_get_default&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;();&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* We make sure that it's a valid GConf-client object. */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_assert&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;GCONF_IS_CLIENT&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;gcClient&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;));&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Store the values. */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;if&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(!&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;gconf_client_set_int&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;gcClient&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; GC_ROOT &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;red&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; color&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;-&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;red&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                             NULL&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;))&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_warning&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot; failed to set %s/red to %d&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#CC33CC&amp;quot;&amp;gt;\n&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; GC_ROOT&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; color&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;-&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;red&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;if&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(!&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;gconf_client_set_int&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;gcClient&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; GC_ROOT &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;green&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; color&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;-&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;green&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                             NULL&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;))&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_warning&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot; failed to set %s/green to %d&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#CC33CC&amp;quot;&amp;gt;\n&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; GC_ROOT&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
               color&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;-&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;green&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;if&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(!&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;gconf_client_set_int&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;gcClient&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; GC_ROOT &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;blue&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; color&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;-&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;blue&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                             NULL&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;))&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_warning&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot; failed to set %s/blue to %d&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#CC33CC&amp;quot;&amp;gt;\n&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; GC_ROOT&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
               color&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;-&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;blue&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Release the GConf client object (with GObject-unref). */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_object_unref&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;gcClient&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   gcClient &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; NULL&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/**&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * NEW&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; *&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * A utility function to get an integer but also return the status&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * whether the requested key existed or not.&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; *&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * NOTE:&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; *   It's also possible to use gconf_client_get_int(), but it's not&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; *   possible to then know whether they key existed or not, because&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; *   the function will return 0 if the key doesn't exist (and if the&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; *   value is 0, how could you tell these two conditions apart?).&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; *&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * Parameters:&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * - GConfClient: the client object to use&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * - const gchar*: the key&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * - gint*: the address to store the integer to if the key exists&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; *&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * Returns:&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * - TRUE: if integer has been updated with a value from GConf.&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; *   FALSE: there was no such key or it wasn't an integer.&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;static&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; gboolean &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;confGetInt&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;GConfClient&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; gcClient&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;const&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; gchar&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; key&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                            gint&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; number&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* This will hold the type/value pair at some point. */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
   GConfValue&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; val &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; NULL&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Return flag (tells the caller whether this function wrote behind&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;     the 'number' pointer or not). */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
   gboolean hasChanged &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; FALSE&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Try to get the type/value from the GConf DB.&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;     NOTE:&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;       We're using a version of the getter that will not return any&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;       defaults (if a schema would specify one). Instead, it will&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;       return the value if one has been set (or NULL).&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;     We're not really interested in errors as this will return a NULL&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;     in case of missing keys or errors and that is quite enough for&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;     us. */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
   val &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;gconf_client_get_without_default&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;gcClient&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; key&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; NULL&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;if&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;val &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;==&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; NULL&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Key wasn't found, no need to touch anything. */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_warning&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;confGetInt: key %s not found&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#CC33CC&amp;quot;&amp;gt;\n&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; key&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;return&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; FALSE&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Check whether the value stored behind the key is an integer. If&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;     it is not, we issue a warning, but return normally. */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;if&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;val&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;-&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;type &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;==&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; GCONF_VALUE_INT&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* It's an integer, get it and store. */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;number &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;gconf_value_get_int&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;val&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Mark that we've changed the integer behind 'number'. */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
     hasChanged &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; TRUE&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;else&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_warning&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;confGetInt: key %s is not an integer&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#CC33CC&amp;quot;&amp;gt;\n&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; key&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Free the type/value-pair. */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;gconf_value_free&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;val&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   val &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; NULL&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;return&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; hasChanged&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/**&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * NEW&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; *&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * Utility function to change the given color into the one that is&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * specified in application preferences.&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; *&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * If some key is missing, that channel is left untouched. The&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * function also checks for proper values for the channels so that&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * invalid values are not accepted (guint16 range of GdkColor).&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; *&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * Parameters:&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * - GdkColor*: the color structure to modify if changed from prefs.&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; *&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * Returns:&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * - TRUE if the color was been changed by this routine.&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; *   FALSE if the color wasn't changed (there was an error or the&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; *   color was already exactly the same as in the preferences).&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;static&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; gboolean &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;confLoadCurrentColor&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;GdkColor&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; color&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   GConfClient&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; gcClient &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; NULL&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Temporary holders for the pref values. */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
   gint red &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;-&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#993399&amp;quot;&amp;gt;1&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   gint green &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;-&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#993399&amp;quot;&amp;gt;1&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   gint blue &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;-&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#993399&amp;quot;&amp;gt;1&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Temp variable to hold whether the color has changed. */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
   gboolean hasChanged &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; FALSE&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_assert&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;color&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_print&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;confLoadCurrentColor: invoked&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#CC33CC&amp;quot;&amp;gt;\n&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Open a connection to gconfd-2 (via d-bus). */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
   gcClient &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;gconf_client_get_default&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;();&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Make sure that it's a valid GConf-client object. */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_assert&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;GCONF_IS_CLIENT&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;gcClient&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;));&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;if&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;confGetInt&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;gcClient&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; GC_ROOT &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;red&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;amp;amp;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;red&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;))&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* We got the value successfully, now clamp it. */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_print&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot; got red = %d, &amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; red&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* We got a value, so let's limit it between 0 and 65535 (the&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;       legal range for guint16). We use the CLAMP macro from GLib for&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;       this. */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
     red &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;CLAMP&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;red&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#993399&amp;quot;&amp;gt;0&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; G_MAXUINT16&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_print&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;after clamping = %d&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#CC33CC&amp;quot;&amp;gt;\n&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; red&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Update &amp;amp;amp; mark that at least this component changed. */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
     color&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;-&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;red &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;guint16&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;red&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     hasChanged &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; TRUE&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Repeat the same logic for the green component. */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;if&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;confGetInt&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;gcClient&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; GC_ROOT &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;green&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;amp;amp;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;green&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;))&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_print&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot; got green = %d, &amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; green&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     green &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;CLAMP&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;green&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#993399&amp;quot;&amp;gt;0&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; G_MAXUINT16&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_print&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;after clamping = %d&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#CC33CC&amp;quot;&amp;gt;\n&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; green&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     color&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;-&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;green &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;guint16&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;green&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     hasChanged &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; TRUE&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Repeat the same logic for the last component (blue). */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;if&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;confGetInt&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;gcClient&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; GC_ROOT &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;blue&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;amp;amp;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;blue&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;))&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_print&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot; got blue = %d, &amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; blue&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     blue &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;CLAMP&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;blue&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#993399&amp;quot;&amp;gt;0&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; G_MAXUINT16&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_print&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;after clamping = %d&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#CC33CC&amp;quot;&amp;gt;\n&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; blue&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     color&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;-&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;blue &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;guint16&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;blue&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     hasChanged &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; TRUE&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Release the client object (with GObject-unref). */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_object_unref&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;gcClient&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   gcClient &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; NULL&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Return status if the color was been changed by this routine. */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;return&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; hasChanged&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/**&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * MODIFIED&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; *&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * Invoked when the user selects a color (or will cancel the dialog).&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; *&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * Will also write the color to preferences (GConf) each time the&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * color changes. We'll compare whether it has really changed (to&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * avoid writing to GConf is nothing really changed).&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;static&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;void&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;cbActionColorChanged&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;HildonColorButton&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; colorButton&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                                  ApplicationState&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; app&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Local variables that we'll need to handle the change (NEW). */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
   gboolean hasChanged &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; FALSE&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   GdkColor newColor &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   GdkColor&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; curColor &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; NULL&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_assert&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;app &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;!=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; NULL&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_print&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;cbActionColorChanged invoked&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#CC33CC&amp;quot;&amp;gt;\n&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Retrieve the new color from the color button (NEW). */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;hildon_color_button_get_color&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;colorButton&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;amp;amp;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;newColor&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Just an alias to save some typing (could also use&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;     app-&amp;amp;gt;currentColor) (NEW). */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
   curColor &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;amp;amp;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;app&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;-&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;currentColor&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Check whether the color really changed (NEW). */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;if&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;((&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;newColor&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;.&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;red   &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;!=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; curColor&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;-&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;red&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
       &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;newColor&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;.&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;green &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;!=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; curColor&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;-&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;green&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
       &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;newColor&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;.&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;blue  &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;!=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; curColor&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;-&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;blue&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;))&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     hasChanged &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; TRUE&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;if&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(!&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;hasChanged&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_print&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot; color not really changed&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#CC33CC&amp;quot;&amp;gt;\n&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;return&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Color really changed, store to preferences (NEW). */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_print&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot; color changed, storing into preferences.. &amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#CC33CC&amp;quot;&amp;gt;\n&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;confStoreColor&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;amp;amp;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;newColor&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_print&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot; done.&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#CC33CC&amp;quot;&amp;gt;\n&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Update the changed color into the application state. */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
   app&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;-&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;currentColor &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; newColor&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/*... Listing cut for brevity ...*/&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/**&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * MODIFIED&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; *&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * The color of the color button will be loaded from the application&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * preferences (or keep the default if preferences have no setting).&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;static&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; GtkWidget&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;buildToolbar&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;ApplicationState&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; app&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   GtkToolbar&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;  toolbar &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; NULL&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   GtkToolItem&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; tbOpen &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; NULL&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   GtkToolItem&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; tbSave &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; NULL&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   GtkToolItem&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; tbSep &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; NULL&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   GtkToolItem&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; tbFind &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; NULL&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   GtkToolItem&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; tbColorButton &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; NULL&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   GtkWidget&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;   colorButton &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; NULL&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_assert&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;app &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;!=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; NULL&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   tbOpen &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;gtk_tool_button_new_from_stock&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;GTK_STOCK_OPEN&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   tbSave &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;gtk_tool_button_new_from_stock&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;GTK_STOCK_SAVE&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   tbSep  &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;gtk_separator_tool_item_new&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;();&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   tbFind &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;gtk_tool_button_new_from_stock&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;GTK_STOCK_FIND&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   tbColorButton &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;gtk_tool_item_new&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;();&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   colorButton &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;hildon_color_button_new&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;();&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Copy the color from the color button into the application state.&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;     This is done to detect whether the color in preferences matches&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;     the default color or not (NEW). */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;hildon_color_button_get_color&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;HILDON_COLOR_BUTTON&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;colorButton&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;),&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                                 &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;amp;amp;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;app&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;-&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;currentColor&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Load preferences and change the color if necessary. */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_print&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;buildToolbar: loading color pref.&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#CC33CC&amp;quot;&amp;gt;\n&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;if&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;confLoadCurrentColor&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;amp;amp;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;app&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;-&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;currentColor&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;))&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_print&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot; color not same as default one&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#CC33CC&amp;quot;&amp;gt;\n&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;hildon_color_button_set_color&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;HILDON_COLOR_BUTTON&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;colorButton&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;),&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                                   &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;amp;amp;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;app&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;-&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;currentColor&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;else&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_print&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot; loaded color same as default&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#CC33CC&amp;quot;&amp;gt;\n&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;gtk_container_add&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;GTK_CONTAINER&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;tbColorButton&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;),&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; colorButton&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/*... Listing cut for brevity ...*/&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Since the graphical appearance of the program does not change (except that the ColorButton will display the correct initial color), a look will be taken at the stdout display of the program.&lt;br /&gt;
&lt;br /&gt;
 [sbox-DIABLO_X86: ~/appdev] &amp;amp;gt; run-standalone.sh ./hildon_helloworld-9&lt;br /&gt;
 buildToolbar: loading color pref.&lt;br /&gt;
 confLoadCurrentColor: invoked&lt;br /&gt;
 hildon_helloworld-9[19840]: GLIB WARNING ** default - &lt;br /&gt;
  confGetInt: key /apps/Maemo/hildon_hello/red not found&lt;br /&gt;
 hildon_helloworld-9[19840]: GLIB WARNING ** default - &lt;br /&gt;
  confGetInt: key /apps/Maemo/hildon_hello/green not found&lt;br /&gt;
 hildon_helloworld-9[19840]: GLIB WARNING ** default - &lt;br /&gt;
  confGetInt: key /apps/Maemo/hildon_hello/blue not found&lt;br /&gt;
  loaded color same as default&lt;br /&gt;
 main: calling gtk_main&lt;br /&gt;
 cbActionMainToolbarToggle invoked&lt;br /&gt;
 cbActionColorChanged invoked&lt;br /&gt;
  color changed, storing into preferences..&lt;br /&gt;
 confStoreColor: invoked&lt;br /&gt;
  done.&lt;br /&gt;
 main: returned from gtk_main and exiting with success&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When running the program for the first time, warnings about the missing keys can be expected (since the values were not present in GConf).&lt;br /&gt;
&lt;br /&gt;
Run the program again and exit:&lt;br /&gt;
&lt;br /&gt;
 [sbox-DIABLO_X86: ~/appdev] &amp;amp;gt; run-standalone.sh ./hildon_helloworld-9&lt;br /&gt;
 buildToolbar: loading color pref.&lt;br /&gt;
 confLoadCurrentColor: invoked&lt;br /&gt;
  got red = 65535, after clamping = 65535&lt;br /&gt;
  got green = 65535, after clamping = 65535&lt;br /&gt;
  got blue = 0, after clamping = 0&lt;br /&gt;
  color not same as default one&lt;br /&gt;
 main: calling gtk_main&lt;br /&gt;
 main: returned from gtk_main and exiting with success&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The next step is to remove one key (red), and run the program again (this is to test and verify that the logic works):&lt;br /&gt;
 &lt;br /&gt;
 [sbox-DIABLO_X86: ~/appdev] &amp;amp;gt; run-standalone.sh gconftool-2  \&lt;br /&gt;
  --unset /apps/Maemo/hildon_hello/red&lt;br /&gt;
 [sbox-DIABLO_X86: ~/appdev] &amp;amp;gt; run-standalone.sh gconftool-2  \&lt;br /&gt;
  -R /apps/Maemo/hildon_hello&lt;br /&gt;
  green = 65535&lt;br /&gt;
  blue = 0&lt;br /&gt;
 [sbox-DIABLO_X86: ~/appdev] &amp;amp;gt; run-standalone.sh ./hildon_helloworld-9&lt;br /&gt;
 buildToolbar: loading color pref.&lt;br /&gt;
 confLoadCurrentColor: invoked&lt;br /&gt;
 hildon_helloworld-9[19924]: GLIB WARNING ** default -&lt;br /&gt;
  confGetInt: key /apps/Maemo/hildon_hello/red not found&lt;br /&gt;
  got green = 65535, after clamping = 65535&lt;br /&gt;
  got blue = 0, after clamping = 0&lt;br /&gt;
  color not same as default one&lt;br /&gt;
 main: calling gtk_main&lt;br /&gt;
 main: returned from gtk_main and exiting with success&lt;br /&gt;
&lt;br /&gt;
==  Asynchronous GConf ==&lt;br /&gt;
&lt;br /&gt;
=== Listening to changes in GConf ===&lt;br /&gt;
&lt;br /&gt;
Now it is time to see how to extend GConf to be more suitable in asynchronous work, and especially when implementing services.&lt;br /&gt;
&lt;br /&gt;
When the configuration needs for the service are simple, and reacting to configuration changes in &amp;quot;realtime&amp;quot; is desired, it is advisable to use GConf. Also, people tend to use GConf when they are too lazy to write their own configuration file parsers (although there is a simple one in GLib), or too lazy to write the GUI part to change the settings. This example program will simulate the first case, and react to changes in a subset of GConf configuration name space when the changes happen.&lt;br /&gt;
&lt;br /&gt;
The application will be interested in two string values; one to set the device to use for communication (connection), and the other to set the communication parameters for the device (connectionparams). Since this example will be concentrating on just the change notifications, the program logic is simplified by omitting the proper set-up code in the program. This means that it is necessary to set up some values to the GConf keys prior to running the program. For this, gconftool-2 will be used, and a target has been prepared in the '''Makefile''' just for this (see section [http://wiki.maemo.org/Documentation/Maemo_5_Developer_Guide/GNU_Build_System#GNU_Make_and_Makefiles GNU Make and Makefiles] if necessary): gconf-listener/Makefile&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# Define a variable for this so that the GConf root may be changed&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 gconf_root &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;:=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; /apps/Maemo/platdev_ex&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# ... Listing cut for brevity ...&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# This will setup the keys into default values.&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# It will first do a clear to remove any existing keys.&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 primekeys&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;:&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; clearkeys&lt;br /&gt;
         gconftool-&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#993399&amp;quot;&amp;gt;2&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; -set -type string &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;\&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                     &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;$(gconf_root)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;/connection btcomm0&lt;br /&gt;
         gconftool-&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#993399&amp;quot;&amp;gt;2&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; -set -type string &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;\&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                     &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;$(gconf_root)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;/connectionparams &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#993399&amp;quot;&amp;gt;9600&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#993399&amp;quot;&amp;gt;8&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;N&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#993399&amp;quot;&amp;gt;1&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# Remove all application keys&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 clearkeys&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;:&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
         @gconftool-&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#993399&amp;quot;&amp;gt;2&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; -recursive-unset &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;$(gconf_root)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;# Dump all application keys&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 dumpkeys&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;:&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
         @echo Keys under &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;$(gconf_root)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;:&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
         @gconftool-&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#993399&amp;quot;&amp;gt;2&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; -recursive-list &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;$(gconf_root)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The next step is to prepare the keyspace by running the primekeys target, and to verify that it succeeds by running the dumpkeys target:&lt;br /&gt;
&lt;br /&gt;
 [sbox-DIABLO_X86: ~/gconf-listener] &amp;amp;gt; make primekeys&lt;br /&gt;
 gconftool-2 --set --type string \&lt;br /&gt;
             /apps/Maemo/platdev_ex/connection btcomm0&lt;br /&gt;
 gconftool-2 --set --type string \&lt;br /&gt;
             /apps/Maemo/platdev_ex/connectionparams 9600,8,N,1&lt;br /&gt;
 [sbox-DIABLO_X86: ~/gconf-listener] &amp;amp;gt; make dumpkeys&lt;br /&gt;
 Keys under /apps/Maemo/platdev_ex:&lt;br /&gt;
  connectionparams = 9600,8,N,1&lt;br /&gt;
  connection = btcomm0&lt;br /&gt;
&lt;br /&gt;
===  Implementing Notifications on Changes in GConf ===&lt;br /&gt;
&lt;br /&gt;
The first step here is to take care of the necessary header information. The GConf namespace settings have been all implemented using cpp macros, so that one can easily change the prefix of the name space if required later on. gconf-listener/gconf-key-watch.c&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000080&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;#include&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;amp;lt;glib.h&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000080&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;#include&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;amp;lt;gconf/gconf-client.h&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000080&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;#include&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;amp;lt;string.h&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* strcmp */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* As per maemo Coding Style and Guidelines document, we use the&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;   /apps/Maemo/ -prefix.&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;   NOTE: There is no central registry (as of this moment) that you&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;         could check that your application name doesn't collide with&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;         other application names, so caution is advised! */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000080&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;#define&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; SERVICE_GCONF_ROOT &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;/apps/Maemo/platdev_ex&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* We define the names of the keys symbolically so that we may change&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;   them later if necessary, and so that the GConf &amp;quot;root directory&amp;quot; for&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;   our application will be automatically prefixed to the paths. */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000080&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;#define&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; SERVICE_KEY_CONNECTION &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;\&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
         SERVICE_GCONF_ROOT &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;/connection&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000080&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;#define&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; SERVICE_KEY_CONNECTIONPARAMS &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;\&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
         SERVICE_GCONF_ROOT &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;/connectionparams&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The main starts innocently enough, by creating a GConf client object (that encapsulates the connection to the GConf daemon), and then displays the two values on output: gconf-listener/gconf-key-watch.c&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;int&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;main&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;int&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; argc&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;char&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;**&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; argv&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Will hold reference to the GConfClient object. */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
   GConfClient&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; client &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; NULL&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Initialize this to NULL so that we'll know whether an error&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;     occurred or not (and we don't have an existing GError object&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;     anyway at this point). */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
   GError&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; error &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; NULL&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* This will hold a reference to the mainloop object. */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
   GMainLoop&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; mainloop &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; NULL&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_print&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;PROGNAME &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;:main Starting.&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#CC33CC&amp;quot;&amp;gt;\n&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Must be called to initialize GType system. The API reference for&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;     gconf_client_get_default() insists.&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;     NOTE: Using gconf_init() is deprecated! */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_type_init&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;();&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Create a new mainloop structure that we'll use. Use default&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;     context (NULL) and set the 'running' flag to FALSE. */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
   mainloop &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_main_loop_new&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;NULL&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; FALSE&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;if&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;mainloop &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;==&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; NULL&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_error&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;PROGNAME &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;: Failed to create mainloop!&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#CC33CC&amp;quot;&amp;gt;\n&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Create a new GConfClient object using the default settings. */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
   client &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;gconf_client_get_default&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;();&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;if&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;client &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;==&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; NULL&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_error&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;PROGNAME &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;: Failed to create GConfClient!&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#CC33CC&amp;quot;&amp;gt;\n&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_print&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;PROGNAME &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;:main GType and GConfClient initialized.&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#CC33CC&amp;quot;&amp;gt;\n&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Display the starting values for the two keys. */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;dispStringKey&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;client&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; SERVICE_KEY_CONNECTION&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;dispStringKey&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;client&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; SERVICE_KEY_CONNECTIONPARAMS&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The dispStringKey utility is rather simple as well, building on the GConf material that was covered in the previous section [localhost#sec:using_gconf_to_read_write_pref 9.3.2]&amp;lt;nowiki&amp;gt;: &amp;lt;/nowiki&amp;gt;gconf-listener/gconf-key-watch.c&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/**&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * Utility to retrieve a string key and display it.&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * (Just as a small refresher on the API.)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;static&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;void&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;dispStringKey&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;GConfClient&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; client&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                           &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;const&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; gchar&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; keyname&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* This will hold the string value of the key. It will be&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;     dynamically allocated for us, so we need to release it ourselves&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;     when done (before returning). */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
   gchar&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; valueStr &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; NULL&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* We're not interested in the errors themselves (the last&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;     parameter), but the function will return NULL if there is one,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;     so we just end in that case. */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
   valueStr &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;gconf_client_get_string&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;client&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; keyname&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; NULL&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;if&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;valueStr &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;==&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; NULL&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_error&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;PROGNAME &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;: No string value for %s. Quitting&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#CC33CC&amp;quot;&amp;gt;\n&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; keyname&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Application terminates. */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_print&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;PROGNAME &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;: Value for key '%s' is set to '%s'&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#CC33CC&amp;quot;&amp;gt;\n&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
           keyname&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; valueStr&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Normally one would want to use the value for something beyond&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;     just displaying it, but since this code doesn't, we release the&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;     allocated value string. */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_free&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;valueStr&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, the GConf client is told to attach itself to a specific name space part that this example is going to operate with: gconf-listener/gconf-key-watch.c&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tt&amp;gt;  &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/**&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;   * Register directory to watch for changes. This will then tell&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;   * GConf to watch for changes in this namespace, and cause the&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;   * &amp;quot;value-changed&amp;quot;-signal to be emitted. We won't be using that&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;   * mechanism, but will opt to a more modern (and potentially more&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;   * scalable solution). The directory needs to be added to the&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;   * watch list in either case.&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;   *&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;   * When adding directories, you can sometimes optimize your program&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;   * performance by asking GConfClient to preload some (or all) keys&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;   * under a specific directory. This is done via the preload_type&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;   * parameter (we use GCONF_CLIENT_PRELOAD_NONE below). Since our&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;   * program will only listen for changes, we don't want to use extra&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;   * memory to keep the keys cached.&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;   *&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;   * Parameters:&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;   * - client: GConf-client object&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;   * - SERVICEPATH: the name of the GConf namespace to follow&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;   * - GCONF_CLIENT_PRELOAD_NONE: do not preload any of contents&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;   * - error: where to store the pointer to allocated GError on&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;   *          errors.&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;   */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;gconf_client_add_dir&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;client&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                        SERVICE_GCONF_ROOT&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                        GCONF_CLIENT_PRELOAD_NONE&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                        &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;amp;amp;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;error&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;if&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;error &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;!=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; NULL&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_error&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;PROGNAME &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;: Failed to add a watch to GCClient: %s&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#CC33CC&amp;quot;&amp;gt;\n&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
             error&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;-&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;message&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Normally we'd also release the allocated GError, but since&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;       this program will terminate on g_error, we won't do that.&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;       Hence the next line is commented. */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* g_error_free(error); */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
     &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* When you want to release the error if it has been allocated,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;       or just continue if not, use g_clear_error(&amp;amp;amp;error); */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_print&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;PROGNAME &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;:main Added &amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; SERVICE_GCONF_ROOT &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;.&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#CC33CC&amp;quot;&amp;gt;\n&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Proceeding with the callback function registration, we have: gconf-listener/gconf-key-watch.c&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tt&amp;gt;  &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Register our interest (in the form of a callback function) for&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;     any changes under the namespace that we just added.&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;     Parameters:&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;     - client: GConfClient object.&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;     - SERVICEPATH: namespace under which we can get notified for&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;                    changes.&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;     - gconf_notify_func: callback that will be called on changes.&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;     - NULL: user-data pointer (not used here).&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;     - NULL: function to call on user-data when notify is removed or&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;             GConfClient destroyed. NULL for none (since we don't&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;             have user-data anyway).&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;     - error: return location for an allocated GError.&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;     Returns:&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;     guint: an ID for this notification so that we could remove it&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;            later with gconf_client_notify_remove(). We're not going&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;            to use it so we don't store it anywhere. */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;gconf_client_notify_add&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;client&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; SERVICE_GCONF_ROOT&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                           keyChangeCallback&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; NULL&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; NULL&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;amp;amp;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;error&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;if&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;error &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;!=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; NULL&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_error&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;PROGNAME &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;: Failed to add register the callback: %s&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#CC33CC&amp;quot;&amp;gt;\n&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
             error&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;-&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;message&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Program terminates. */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_print&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;PROGNAME &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;:main CB registered &amp;amp;amp; starting main loop&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#CC33CC&amp;quot;&amp;gt;\n&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When dealing with regular desktop software, one could use multiple callback functions; one for each key to track. However, this would require implementing multiple callback functions, and this runs a risk of enlarging the size of the code. For this reason, the example code uses one callback function, which will internally multiplex between the two keys (by using strcmp): gconf-listener/gconf-key-watch.c&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/**&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * Callback called when a key in watched directory changes.&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * Prototype for the callback must be compatible with&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * GConfClientNotifyFunc (for ref).&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; *&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * It will find out which key changed (using strcmp, since the same&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * callback is used to track both keys) and the display the new value&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * of the key.&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; *&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * The changed key/value pair will be communicated in the entry&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * parameter. userData will be NULL (can be set on notify_add [in&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * main]). Normally the application state would be carried within the&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * userData parameter, so that this callback could then modify the&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * view based on the change. Since this program does not have a state,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * there is little that we can do within the function (it will abort&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * the program on errors though).&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;static&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;void&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;keyChangeCallback&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;GConfClient&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; client&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                               guint        cnxn_id&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                               GConfEntry&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;  entry&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                               gpointer     userData&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* This will hold the pointer to the value. */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;const&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; GConfValue&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; value &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; NULL&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* This will hold a pointer to the name of the key that changed. */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;const&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; gchar&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; keyname &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; NULL&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* This will hold a dynamically allocated human-readable&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;     representation of the changed value. */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
   gchar&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; strValue &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; NULL&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_print&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;PROGNAME &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;: keyChangeCallback invoked.&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#CC33CC&amp;quot;&amp;gt;\n&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Get a pointer to the key (this is not a copy). */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
   keyname &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;gconf_entry_get_key&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;entry&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* It will be quite fatal if after change we cannot retrieve even&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;     the name for the gconf entry, so we error out here. */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;if&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;keyname &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;==&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; NULL&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_error&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;PROGNAME &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;: Couldn't get the key name!&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#CC33CC&amp;quot;&amp;gt;\n&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Application terminates. */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Get a pointer to the value from changed entry. */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
   value &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;gconf_entry_get_value&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;entry&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* If we get a NULL as the value, it means that the value either has&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;     not been set, or is at default. As a precaution we assume that&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;     this cannot ever happen, and will abort if it does.&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;     NOTE: A real program should be more resilient in this case, but&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;           the problem is: what is the correct action in this case?&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;           This is not always simple to decide.&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;     NOTE: You can trip this assert with 'make primekeys', since that&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;           will first remove all the keys (which causes the CB to&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;           be invoked, and abort here). */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_assert&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;value &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;!=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; NULL&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Check that it looks like a valid type for the value. */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;if&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(!&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;GCONF_VALUE_TYPE_VALID&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;value&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;-&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;type&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;))&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_error&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;PROGNAME &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;: Invalid type for gconfvalue!&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#CC33CC&amp;quot;&amp;gt;\n&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Create a human readable representation of the value. Since this&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;     will be a new string created just for us, we'll need to be&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;     careful and free it later. */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
   strValue &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;gconf_value_to_string&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;value&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Print out a message (depending on which of the tracked keys&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;     change. */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;if&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;strcmp&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;keyname&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; SERVICE_KEY_CONNECTION&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;==&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#993399&amp;quot;&amp;gt;0&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_print&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;PROGNAME &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;: Connection type setting changed: [%s]&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#CC33CC&amp;quot;&amp;gt;\n&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
             strValue&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;else&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;if&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;strcmp&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;keyname&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; SERVICE_KEY_CONNECTIONPARAMS&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;==&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#993399&amp;quot;&amp;gt;0&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_print&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;PROGNAME &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;: Connection params setting changed: [%s]&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#CC33CC&amp;quot;&amp;gt;\n&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
             strValue&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;else&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_print&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;PROGNAME &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;:Unknown key: %s (value: [%s])&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#CC33CC&amp;quot;&amp;gt;\n&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; keyname&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
             strValue&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Free the string representation of the value. */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_free&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;strValue&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_print&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;PROGNAME &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;: keyChangeCallback done.&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#CC33CC&amp;quot;&amp;gt;\n&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The complications in the above code rise from the fact that GConf communicates values using a GValue structure, which can carry values of any simple type. Since GConf (or the user for that matter) cannot be completely trusted to return the correct type for the value, it is necessary to be extra careful, and not assume that it will always be a string. GConf also supports &amp;quot;default&amp;quot; values, which are communicated to the application using NULLs, so it is also necessary to guard against that. Especially since the application does not provide a schema for the configuration space that would contain the default values.&lt;br /&gt;
&lt;br /&gt;
The next step is to build and test the program. The program will be started on the background, so that gconftool-2 can be used to see how the program reacts to changing parameters:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
 [sbox-DIABLO_X86: ~/gconf-listener] &amp;amp;gt; make&lt;br /&gt;
 cc -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/gconf/2 \&lt;br /&gt;
    -I/usr/include/dbus-1.0 -I/usr/lib/dbus-1.0/include -Wall -g \&lt;br /&gt;
    -DPROGNAME=\&amp;quot;gconf-key-watch\&amp;quot; gconf-key-watch.c -o gconf-key-watch \&lt;br /&gt;
    -lgconf-2 -ldbus-glib-1 -ldbus-1 -lgobject-2.0 -lglib-2.0&lt;br /&gt;
 [sbox-DIABLO_X86: ~/gconf-listener] &amp;amp;gt; run-standalone.sh ./gconf-key-watch &amp;amp;amp;&lt;br /&gt;
 [2] 21385&lt;br /&gt;
 gconf-key-watch:main Starting.&lt;br /&gt;
 gconf-key-watch:main GType and GConfClient initialized.&lt;br /&gt;
 gconf-key-watch: Value for key '/apps/Maemo/platdev_ex/connection'&lt;br /&gt;
  is set to 'btcomm0'&lt;br /&gt;
 gconf-key-watch: Value for key '/apps/Maemo/platdev_ex/connectionparams'&lt;br /&gt;
  is set to '9600,8,N,1'&lt;br /&gt;
 gconf-key-watch:main Added /apps/Maemo/platdev_ex.&lt;br /&gt;
 gconf-key-watch:main CB registered &amp;amp;amp; starting main loop&lt;br /&gt;
 [sbox-DIABLO_X86: ~/gconf-listener] &amp;amp;gt; gconftool-2 --set --type string \&lt;br /&gt;
   /apps/Maemo/platdev_ex/connection ttyS0&lt;br /&gt;
 gconf-key-watch: keyChangeCallback invoked.&lt;br /&gt;
 gconf-key-watch: Connection type setting changed: [ttyS0]&lt;br /&gt;
 gconf-key-watch: keyChangeCallback done.&lt;br /&gt;
 [sbox-DIABLO_X86: ~/gconf-listener] &amp;amp;gt; gconftool-2 --set --type string \&lt;br /&gt;
   /apps/Maemo/platdev_ex/connectionparams ''&lt;br /&gt;
 gconf-key-watch: keyChangeCallback invoked.&lt;br /&gt;
 gconf-key-watch: Connection params setting changed: []&lt;br /&gt;
 gconf-key-watch: keyChangeCallback done.&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The latter change is somewhat problematic (which the code needs to deal with as well). It is necessary to decide how to react to values that are of the correct type, but with senseless values. GConf in itself does not provide syntax checking for the values, or any semantic checking support. It is recommended that configuration changes will only be reacted to when they pass some internal (to the application) logic that will check their validity, both at syntax level and also at semantic level.&lt;br /&gt;
&lt;br /&gt;
One option would also be resetting the value back to a valid value, whenever the program detects an invalid value set attempt. This will lead to a lot of problems, if the value is set programmatically from another program that will obey the same rule, so it is not advisable. Quitting the program on invalid values is also an option that should not be used, since the restricted environment does not provide many ways to inform the user that the program has quit.&lt;br /&gt;
&lt;br /&gt;
An additional possible problem is having multiple keys that are all &amp;quot;related&amp;quot; to a single setting or action. It is necessary to decide, how to deal with changes across multiple GConf keys that are related, yet changed separately. The two key example code demonstrates the inherent problem: should the server re-initialize the (theoretic) connection, when the connection key is changed, or when the connectionparams key is changed? If the connection is re-initialized when either of the keys is changed, then the connection will be re-initialized twice when both are changed &amp;quot;simultaneously&amp;quot; (user presses &amp;quot;Apply&amp;quot; on a settings dialog, or gconftool-2 is run and sets both keys). It is easy to see how this might be an even larger problem, if instead of two keys, there were five per connection. GConf and the GConfClient GObject wrapper that has been used here do not support &amp;quot;configuration set transactions&amp;quot;, which would allow setting and processing multiple related keys using an atomic model. The example program ignores this issue completely.&lt;br /&gt;
&lt;br /&gt;
The next step is to test how the program (which is still running) reacts to other problematic situations:&lt;br /&gt;
&lt;br /&gt;
 [sbox-DIABLO_X86: ~/gconf-listener] &amp;amp;gt; gconftool-2 --set --type int \&lt;br /&gt;
   /apps/Maemo/platdev_ex/connectionparams 5&lt;br /&gt;
 gconf-key-watch: keyChangeCallback invoked.&lt;br /&gt;
 gconf-key-watch: Connection params setting changed: [5]&lt;br /&gt;
 gconf-key-watch: keyChangeCallback done.&lt;br /&gt;
 [sbox-DIABLO_X86: ~/gconf-listener] &amp;amp;gt; gconftool-2 --set --type boolean \&lt;br /&gt;
   /apps/Maemo/platdev_ex/connectionparams true&lt;br /&gt;
 gconf-key-watch: keyChangeCallback invoked.&lt;br /&gt;
 gconf-key-watch: Connection params setting changed: [true]&lt;br /&gt;
 gconf-key-watch: keyChangeCallback done.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The next example removes the configuration keys, while the program is still running:&lt;br /&gt;
&lt;br /&gt;
 [sbox-DIABLO_X86: ~/gconf-listener] &amp;amp;gt; make clearkeys&lt;br /&gt;
 gconf-key-watch: keyChangeCallback invoked.&lt;br /&gt;
 gconf-key-watch[21403]: GLIB ERROR ** default - &lt;br /&gt;
   file gconf-key-watch.c: line 129 (keyChangeCallback):&lt;br /&gt;
   assertion failed: (value != NULL)&lt;br /&gt;
 aborting...&lt;br /&gt;
 /usr/bin/run-standalone.sh: line 11: 21403 Aborted (core dumped) &amp;quot;$@&amp;quot;&lt;br /&gt;
 [1]+  Exit 134 run-standalone.sh ./gconf-key-watch&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Since the code (in the callback function) contains an assert that checks for non-NULL values, it will abort when the key is removed, and that causes the value to go to NULL. So the abortion in the above case is expected.&lt;/div&gt;</description>
			<pubDate>Wed, 02 Sep 2009 12:28:17 GMT</pubDate>			<dc:creator>Maemo</dc:creator>			<comments>http://bugs.maemo.com/Talk:Documentation/Maemo_5_Developer_Guide/Using_Generic_Platform_Components/Application_Preferences-Gconf</comments>		</item>
		<item>
			<title>Documentation/Maemo 5 Developer Guide/Using Generic Platform Components/GnomeVFS File System</title>
			<link>http://bugs.maemo.com/Documentation/Maemo_5_Developer_Guide/Using_Generic_Platform_Components/GnomeVFS_File_System</link>
			<guid>http://bugs.maemo.com/Documentation/Maemo_5_Developer_Guide/Using_Generic_Platform_Components/GnomeVFS_File_System</guid>
			<description>&lt;p&gt;Maemo:&amp;#32;/* File System - GnomeVFS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= File System - GnomeVFS =&lt;br /&gt;
&lt;br /&gt;
Maemo includes a powerful file system framework, GnomeVFS. This framework enables applications to use a vast number of different file access protocols without having to know anything about the underlying details. Some examples of the supported protocols are: local file system, HTTP, FTP and OBEX over Bluetooth.&lt;br /&gt;
&lt;br /&gt;
In practice, this means that all GnomeVFS file access methods are transparently available for both developer and end user just by using the framework for file operations. The API for file handling is also much more flexible than the standard platform offerings. It features, for example, asynchronous reading and writing, MIME type support and file monitoring.&lt;br /&gt;
&lt;br /&gt;
All user-file access should be done with GnomeVFS in maemo applications, because file access can be remote. In fact, many applications that come with the operating system on the Maemo compatible device do make use of GnomeVFS. Access to files not visible to the user should be done directly for performance reasons.&lt;br /&gt;
&lt;br /&gt;
A good hands-on starting point is taking a look at the GnomeVFS example in maemo-examples package. Detailed API information can be found in the [http://library.gnome.org/devel/gnome-vfs-2.0/stable/ GnomeVFS API reference]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==GnomeVFS Example==&lt;br /&gt;
&lt;br /&gt;
This section uses the following example:&lt;br /&gt;
* [https://garage.maemo.org/svn/maemoexamples/trunk/support-libraries/hildon_helloworld-8.c hildon_helloworld-8.c]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In maemo, GnomeVFS also provides some filename case insensitivity support, so that the end users do not have to care about the UNIX filename conventions, which are case-sensitive.&lt;br /&gt;
&lt;br /&gt;
The GnomeVFS interface attempts to provide a POSIX-like interface, so that where with POSIX you would use open(), in GnomeVFS you can use gnome_vfs_open; and instead of write(), you can use gnome_vfs_write, etc. The GnomeVFS function names are sometimes a bit more verbose, but otherwise they attempt to implement the basic API. Some POSIX functions, such as mmap(), are impossible to implement in the user space, but normally this is not a big problem. Also some functions fail to work over network connections and outside the local filesystem.&lt;br /&gt;
&lt;br /&gt;
For a simple example of using the GnomeVFS interface functions, see below.&lt;br /&gt;
&lt;br /&gt;
In order to save and load data, at least the following functions are needed:&lt;br /&gt;
&lt;br /&gt;
* '''gnome_vfs_init()'''&amp;lt;nowiki&amp;gt;: initializes the GnomeVFS library. Needs to be done once at an early stage at program startup. &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* '''gnome_vfs_shutdown()'''&amp;lt;nowiki&amp;gt;: frees up resources inside the library and closes it down. &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* '''gnome_vfs_open()'''&amp;lt;nowiki&amp;gt;: opens the given URI (explained below) and returns a file handle for that if successful. &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* '''gnome_vfs_get_file_info()'''&amp;lt;nowiki&amp;gt;: get information about a file (similar to, but with broader scope than fstat). &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* '''gnome_vfs_read()'''&amp;lt;nowiki&amp;gt;: read data from an opened file. &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* '''gnome_vfs_write()'''&amp;lt;nowiki&amp;gt;: write data into an opened file. &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In order to differentiate between different protocols, GnomeVFS uses Uniform Resource 2 syntax when accessing resources. For example in '''file:///tmp/somefile.txt''', the file:// is the protocol to use, and the rest is the location within that protocol space for the resource or file to manipulate. Protocols can be stacked inside a single URI, and the URI also supports username and password combinations (these are best demonstrated in the GnomeVFS API documentation).&lt;br /&gt;
&lt;br /&gt;
The following simple demonstration will be using local files.&lt;br /&gt;
&lt;br /&gt;
A simple application will be extended in the following ways:&lt;br /&gt;
&lt;br /&gt;
* Implement the &amp;quot;Open&amp;quot; command by using GnomeVFS with full error checking.&lt;br /&gt;
* The memory will be allocated and freed with g_malloc0() and g_free(), when loading the contents of the file that the user has selected.&lt;br /&gt;
* Data loaded through &amp;quot;Open&amp;quot; will replace the text in the GtkLabel that is in the center area of the HildonWindow. The label will be switched to support Pango simple text [http://maemo.org/api_refs/4.0/pango/PangoMarkupFormat.html markup], which looks a lot like simple HTML.&lt;br /&gt;
* Notification about loading success and failures will be communicated to the user by using a widget called HildonBanner, which will float a small notification dialog (with an optional icon) in the top-right corner for a while, without blocking the application.&lt;br /&gt;
* N.B. Saving into a file is not implemented in this code, as it is a lab exercise (and it is simpler than opening).&lt;br /&gt;
* File loading failures can be simulated by attempting to load an empty file. Since empty files are not wanted, the code will turn this into an error as well. If no empty file is available, one can easily be created with the touch command (under '''MyDocs''', so that the open dialog can find it). It is also possible to attempt to load a file larger than 100 KiB, since the code limits the file size (artificially), and will refuse to load large files.&lt;br /&gt;
* The goto statement should normally be avoided. Team coding guidelines should be checked to see, whether this is an allowed practice. Note how it is used in this example to cut down the possibility of leaked resources (and typing). Another option for this would be using variable finalizers, but not many people know how to use them, or even that they exist. They are gcc extensions into the C language, and you can find more about them by reading gcc info pages (look for variable attributes).&lt;br /&gt;
* Simple GnomeVFS functions are used here. They are all synchronous, which means that if loading the file takes a long time, the application will remain unresponsive during that time. For small files residing in local storage, this is a risk that is taken knowingly. Synchronous API should not be used when loading files over network due to the greater uncertainty.&lt;br /&gt;
* I/O in most cases will be slightly slower than using a controlled approach with POSIX I/O API (controlled meaning that one should know what to use and how). This is a price that has to be paid in order to enable easy switching to other protocols later.&lt;br /&gt;
&lt;br /&gt;
N.B. Since GnomeVFS is a separate library from GLib, you will have to add the flags and library options that it requires. The pkg-config package name for the library is &amp;lt;code&amp;gt;gnome-vfs-2.0&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/**&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * hildon_helloworld-8.c&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; *&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * This maemo code example is licensed under a MIT-style license,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * that can be found in the file called &amp;quot;License&amp;quot; in the same&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * directory as this file.&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * Copyright (c) 2007-2008 Nokia Corporation. All rights reserved.&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; *&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * We add file loading support using GnomeVFS. Saving files using&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * GnomeVFS is left as an exercise. We also add a small notification&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * widget (HildonBanner).&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; *&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * Look for lines with &amp;quot;NEW&amp;quot; or &amp;quot;MODIFIED&amp;quot; in them.&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000080&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;#include&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;amp;lt;stdlib.h&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000080&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;#include&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;amp;lt;hildon/hildon-program.h&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000080&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;#include&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;amp;lt;hildon/hildon-color-button.h&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000080&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;#include&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;amp;lt;hildon/hildon-find-toolbar.h&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000080&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;#include&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;amp;lt;hildon/hildon-file-chooser-dialog.h&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* A small notification window widget (NEW). */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000080&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;#include&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;amp;lt;hildon/hildon-banner.h&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Pull in the GnomeVFS headers (NEW). */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000080&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;#include&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;amp;lt;libgnomevfs/gnome-vfs.h&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Declare the two slant styles. */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;enum&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   STYLE_SLANT_NORMAL &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#993399&amp;quot;&amp;gt;0&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   STYLE_SLANT_ITALIC&lt;br /&gt;
 &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/**&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * The application state.&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;typedef&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;struct&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   gboolean styleUseUnderline&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   gboolean styleSlant&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   GdkColor currentColor&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Pointer to the label so that we can modify its contents when a&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;     file is loaded by the user (NEW). */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
   GtkWidget&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; textLabel&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   gboolean fullScreen&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   GtkWidget&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; findToolbar&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   GtkWidget&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; mainToolbar&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   gboolean findToolbarIsVisible&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   gboolean mainToolbarIsVisible&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   HildonProgram&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; program&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   HildonWindow&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; window&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; ApplicationState&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/*... Listing cut for brevity ...*/&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/**&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * Utility function to print a GnomeVFS I/O related error message to&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * standard error (not seen by the user in graphical mode) (NEW).&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;static&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;void&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;dbgFileError&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;GnomeVFSResult errCode&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;const&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; gchar&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; uri&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_printerr&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;Error while accessing '%s': %s&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#CC33CC&amp;quot;&amp;gt;\n&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; uri&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
              &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;gnome_vfs_result_to_string&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;errCode&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;));&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/**&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * MODIFIED (A LOT)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; *&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * We read in the file selected by the user if possible and set the&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * contents of the file as the new Label content.&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; *&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * If reading the file fails, the label will be left unchanged.&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;static&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;void&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;cbActionOpen&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;GtkWidget&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; widget&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; ApplicationState&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; app&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   gchar&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; filename &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; NULL&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* We need to use URIs with GnomeVFS, so declare one here. */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
   gchar&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; uri &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; NULL&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_assert&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;app &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;!=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; NULL&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Bad things will happen if these two widgets don't exist. */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_assert&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;GTK_IS_LABEL&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;app&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;-&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;textLabel&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;));&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_assert&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;GTK_IS_WINDOW&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;app&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;-&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;window&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;));&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_print&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;cbActionOpen invoked&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#CC33CC&amp;quot;&amp;gt;\n&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Ask the user to select a file to open. */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
   filename &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;runFileChooser&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;app&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; GTK_FILE_CHOOSER_ACTION_OPEN&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;if&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;filename&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* This will point to loaded data buffer. */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
     gchar&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; buffer &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; NULL&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Pointer to a structure describing an open GnomeVFS &amp;quot;file&amp;quot;. */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
     GnomeVFSHandle&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; fileHandle &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; NULL&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Structure to hold information about a &amp;quot;file&amp;quot;, initialized to&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;       zero. */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
     GnomeVFSFileInfo fileInfo &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Result code from the GnomeVFS operations. */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
     GnomeVFSResult result&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Size of the file (in bytes) that we'll read in. */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
     GnomeVFSFileSize fileSize &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#993399&amp;quot;&amp;gt;0&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Number of bytes that were read in successfully. */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
     GnomeVFSFileSize readCount &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#993399&amp;quot;&amp;gt;0&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
     &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_print&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;  you chose to load file '%s'&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#CC33CC&amp;quot;&amp;gt;\n&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; filename&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
     &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Convert the filename into an GnomeVFS URI. */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
     uri &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;gnome_vfs_get_uri_from_local_path&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;filename&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* We don't need the original filename anymore. */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_free&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;filename&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     filename &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; NULL&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Should not happen since we got a filename before. */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_assert&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;uri &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;!=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; NULL&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Attempt to get file size first. We need to get information&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;       about the file and aren't interested in other than the very&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;       basic information, so we'll use the INFO_DEFAULT setting. */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
     result &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;gnome_vfs_get_file_info&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;uri&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;amp;amp;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;fileInfo&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                                      GNOME_VFS_FILE_INFO_DEFAULT&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;if&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;result &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;!=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; GNOME_VFS_OK&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
       &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* There was a failure. Print a debug error message and break&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;         out into error handling. */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
       &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;dbgFileError&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;result&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; uri&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
       &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;goto&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; error&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
     &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* We got the information (maybe). Let's check whether it&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;       contains the data that we need. */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;if&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;fileInfo&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;.&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;valid_fields &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;amp;amp;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; GNOME_VFS_FILE_INFO_FIELDS_SIZE&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
       &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Yes, we got the file size. */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
       fileSize &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; fileInfo&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;.&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;size&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;else&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
       &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_printerr&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;Couldn't get the size of file!&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#CC33CC&amp;quot;&amp;gt;\n&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
       &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;goto&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; error&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
     &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* By now we have the file size to read in. Check for some limits&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;       first. */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;if&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;fileSize &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#993399&amp;quot;&amp;gt;1024&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#993399&amp;quot;&amp;gt;100&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
       &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_printerr&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;Loading over 100KiB files is not supported!&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#CC33CC&amp;quot;&amp;gt;\n&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
       &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;goto&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; error&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Refuse to load empty files. */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;if&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;fileSize &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;==&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#993399&amp;quot;&amp;gt;0&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
       &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_printerr&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;Refusing to load an empty file&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#CC33CC&amp;quot;&amp;gt;\n&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
       &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;goto&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; error&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
     &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Allocate memory for the contents and fill it with zeroes.&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;       NOTE:&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;         We leave space for the terminating zero so that we can pass&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;         this buffer as gchar to string functions and it is&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;         guaranteed to be terminated, even if the file doesn't end&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;         with binary zero (odds of that happening are small). */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
     buffer &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_malloc0&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;fileSize&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;+&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#993399&amp;quot;&amp;gt;1&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;if&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;buffer &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;==&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; NULL&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
       &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_printerr&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;Failed to allocate %u bytes for buffer&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#CC33CC&amp;quot;&amp;gt;\n&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                  &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;guint&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;fileSize&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
       &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;goto&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; error&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
     &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Open the file.&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;       Parameters:&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;       - A pointer to the location where to store the address of the&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;         new GnomeVFS file handle (created internally in open).&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;       - uri: What to open (needs to be GnomeVFS URI).&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;       - open-flags: Flags that tell what we plan to use the handle&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;         for. This will affect how permissions are checked by the&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;         Linux kernel. */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
     result &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;gnome_vfs_open&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;amp;amp;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;fileHandle&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; uri&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; GNOME_VFS_OPEN_READ&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;if&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;result &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;!=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; GNOME_VFS_OK&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
       &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;dbgFileError&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;result&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; uri&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
       &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;goto&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; error&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* File opened succesfully, read its contents in. */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
     result &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;gnome_vfs_read&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;fileHandle&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; buffer&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; fileSize&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                             &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;amp;amp;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;readCount&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;if&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;result &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;!=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; GNOME_VFS_OK&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
       &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;dbgFileError&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;result&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; uri&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
       &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;goto&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; error&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Verify that we got the amount of data that we requested.&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;       NOTE:&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;         With URIs it won't be an error to get less bytes than you&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;         requested. Getting zero bytes will however signify an&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;         End-of-File condition. */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;if&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;fileSize &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;!=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; readCount&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
       &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_printerr&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;Failed to load the requested amount&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#CC33CC&amp;quot;&amp;gt;\n&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
       &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* We could also attempt to read the missing data until we have&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;         filled our buffer, but for simplicity, we'll flag this&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;         condition as an error. */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
       &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;goto&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; error&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
     &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Whew, if we got this far, it means that we actually managed to&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;       load the file into memory. Let's set the buffer contents as&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;       the new label now. */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;gtk_label_set_markup&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;GTK_LABEL&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;app&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;-&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;textLabel&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;),&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; buffer&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
     &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* That's it! Display a message of great joy. For this we'll use&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;       a dialog (non-modal) designed for displaying short&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;       informational messages. It will linger around on the screen&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;       for a while and then disappear (in parallel to our program&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;       continuing). */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;hildon_banner_show_information&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;GTK_WIDGET&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;app&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;-&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;window&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;),&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
       NULL&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Use the default icon (info). */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
       &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;File loaded successfully&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
     &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Jump to the resource releasing phase. */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;goto&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; release&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   error&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;:&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Display a failure message with a stock icon.&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;       Please see &amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;u&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;http://maemo.org/api_refs/4.0/gtk/gtk-Stock-Items.html&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/u&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;       for a full listing of stock items. */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;hildon_banner_show_information&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;GTK_WIDGET&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;app&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;-&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;window&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;),&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
       GTK_STOCK_DIALOG_ERROR&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Use the stock error icon. */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
       &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;Failed to load the file&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   release&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;:&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Close and free all resources that were allocated. */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;if&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;fileHandle&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;gnome_vfs_close&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;fileHandle&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;if&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;filename&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_free&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;filename&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;if&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;uri&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_free&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;uri&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;if&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;buffer&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_free&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;buffer&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Zero them all out to prevent stack-reuse-bugs. */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
     fileHandle &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; NULL&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     filename &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; NULL&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     uri &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; NULL&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     buffer &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; NULL&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
     &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;return&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;else&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_print&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;  you didn't choose any file to open&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#CC33CC&amp;quot;&amp;gt;\n&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/**&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * MODIFIED (kind of)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; *&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * Function to save the contents of the label (although it doesn't&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * actually save the contents, on purpose). Use gtk_label_get_label&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * to get a gchar pointer into the application label contents&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * (including current markup), then use gnome_vfs_create and&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * gnome_vfs_write to create the file (left as an exercise).&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;static&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;void&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;cbActionSave&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;GtkWidget&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; widget&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; ApplicationState&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; app&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   gchar&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; filename &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; NULL&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_assert&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;app &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;!=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; NULL&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_print&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;cbActionSave invoked&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#CC33CC&amp;quot;&amp;gt;\n&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   filename &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;runFileChooser&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;app&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; GTK_FILE_CHOOSER_ACTION_SAVE&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;if&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;filename&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_print&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;  you chose to save into '%s'&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#CC33CC&amp;quot;&amp;gt;\n&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; filename&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Process saving .. */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
     &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_free&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;filename&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     filename &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; NULL&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;else&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_print&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;  you didn't choose a filename to save to&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#CC33CC&amp;quot;&amp;gt;\n&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/*... Listing cut for brevity ...*/&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/**&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * MODIFIED&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; *&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * Add support for GnomeVFS (it needs to be initialized before use)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * and add support for the Pango markup feature of the GtkLabel&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * widget.&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;int&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;main&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;int&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; argc&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;char&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;**&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; argv&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   ApplicationState aState &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   GtkWidget&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; label &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; NULL&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   GtkWidget&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; vbox &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; NULL&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   GtkWidget&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; mainToolbar &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; NULL&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   GtkWidget&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; findToolbar &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; NULL&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Initialize the GnomeVFS (NEW). */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;if&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(!&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;gnome_vfs_init&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;())&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_error&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;Failed to initialize GnomeVFS-libraries, exiting&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#CC33CC&amp;quot;&amp;gt;\n&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Initialize the GTK+ */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;gtk_init&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;amp;amp;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;argc&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;amp;amp;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;argv&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Setup the HildonProgram, HildonWindow and application name. */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
   aState&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;.&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;program &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;HILDON_PROGRAM&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;hildon_program_get_instance&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;());&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_set_application_name&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;Hello Hildon!&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   aState&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;.&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;window &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;HILDON_WINDOW&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;hildon_window_new&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;());&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;hildon_program_add_window&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;aState&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;.&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;program&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                             &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;HILDON_WINDOW&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;aState&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;.&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;window&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;));&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Create the label widget, with Pango marked up content (NEW). */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
   label &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;gtk_label_new&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;&amp;amp;lt;b&amp;amp;gt;Hello&amp;amp;lt;/b&amp;amp;gt; &amp;amp;lt;i&amp;amp;gt;Hildon&amp;amp;lt;/i&amp;amp;gt; (with Hildon&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                         &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;&amp;amp;lt;sub&amp;amp;gt;search&amp;amp;lt;/sub&amp;amp;gt; &amp;amp;lt;u&amp;amp;gt;and&amp;amp;lt;/u&amp;amp;gt; GnomeVFS &amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                         &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;and other tricks&amp;amp;lt;sup&amp;amp;gt;tm&amp;amp;lt;/sup&amp;amp;gt;)!&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Allow lines to wrap (NEW). */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;gtk_label_set_line_wrap&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;GTK_LABEL&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;label&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;),&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; TRUE&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Tell the GtkLabel widget to support the Pango markup (NEW). */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;gtk_label_set_use_markup&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;GTK_LABEL&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;label&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;),&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; TRUE&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Store the widget pointer into the application state so that the&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;     contents can be replaced when a file will be loaded (NEW). */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
   aState&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;.&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;textLabel &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; label&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;buildMenu&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;amp;amp;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;aState&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   vbox &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;gtk_vbox_new&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;FALSE&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#993399&amp;quot;&amp;gt;0&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;gtk_container_add&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;GTK_CONTAINER&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;aState&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;.&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;window&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;),&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; vbox&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;gtk_box_pack_end&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;GTK_BOX&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;vbox&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;),&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; label&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; TRUE&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; TRUE&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#993399&amp;quot;&amp;gt;0&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   mainToolbar &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;buildToolbar&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;amp;amp;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;aState&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   findToolbar &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;buildFindToolbar&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;amp;amp;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;aState&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   aState&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;.&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;mainToolbar &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; mainToolbar&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   aState&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;.&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;findToolbar &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; findToolbar&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Connect the termination signals. */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_signal_connect&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;G_OBJECT&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;aState&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;.&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;window&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;),&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;delete-event&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                    &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;G_CALLBACK&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;cbEventDelete&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;),&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;amp;amp;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;aState&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_signal_connect&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;G_OBJECT&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;aState&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;.&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;window&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;),&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;destroy&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                    &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;G_CALLBACK&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;cbActionTopDestroy&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;),&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;amp;amp;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;aState&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Show all widgets that are contained by the Window. */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;gtk_widget_show_all&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;GTK_WIDGET&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;aState&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;.&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;window&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;));&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Add the toolbars to the Hildon Window. */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;hildon_window_add_toolbar&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;HILDON_WINDOW&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;aState&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;.&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;window&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;),&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                             &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;GTK_TOOLBAR&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;mainToolbar&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;));&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;hildon_window_add_toolbar&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;HILDON_WINDOW&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;aState&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;.&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;window&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;),&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                             &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;GTK_TOOLBAR&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;findToolbar&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;));&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Register a callback to handle key presses. */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_signal_connect&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;G_OBJECT&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;aState&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;.&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;window&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;),&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;key_press_event&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                    &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;G_CALLBACK&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;cbKeyPressed&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;),&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;amp;amp;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;aState&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_print&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;main: calling gtk_main&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#CC33CC&amp;quot;&amp;gt;\n&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;gtk_main&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;();&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_print&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;main: returned from gtk_main and exiting with success&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#CC33CC&amp;quot;&amp;gt;\n&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;return&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; EXIT_SUCCESS&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:hildon_helloworld-8-ok.png|Image hildon_helloworld-8-ok]]&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Image:hildon_helloworld-8-failed.png|Image hildon_helloworld-8-failed]]&lt;br /&gt;
&lt;br /&gt;
In order to experiment with loading other content, a simple file can be created, containing Pango markup like this: '''echo &amp;quot;&amp;amp;lt;b&amp;amp;gt;Hello world&amp;amp;lt;/b&amp;amp;gt;&amp;quot; &amp;amp;gt; MyDocs/hello.txt''' , and then loading hello.txt.&lt;br /&gt;
&lt;br /&gt;
As can be imagined, these examples have only scratched the surface of GnomeVFS that is quite a rich library, and contains a broad API and a large amount of plug-ins. Many things have been completely avoided, such as directory content iteration, the asynchronous interface, callback signaling on directory content changes etc. Please see [http://library.gnome.org/devel/gnome-vfs-2.0/stable/ GnomeVFS API reference] for more information. The API also contains some mini tutorials on various GnomeVFS topics, so it is well worth the time spent reading. It will also show that GnomeVFS has been overloaded with functions, which are not even file operation related (such as ZeroConf and creating TCP/IP connections etc.).&lt;br /&gt;
&lt;br /&gt;
GTK+ does not have to be used in order to use GnomeVFS. One such example program is Midnight Commander (a Norton Commander clone, but better), which is a menu-based &amp;quot;text&amp;quot; mode program. GnomeVFS uses GLib though, so if using GnomeVFS, one should think about using GLib as well, as it will be loaded anyway.&lt;/div&gt;</description>
			<pubDate>Wed, 02 Sep 2009 12:24:34 GMT</pubDate>			<dc:creator>Maemo</dc:creator>			<comments>http://bugs.maemo.com/Talk:Documentation/Maemo_5_Developer_Guide/Using_Generic_Platform_Components/GnomeVFS_File_System</comments>		</item>
		<item>
			<title>Documentation/Maemo 5 Developer Guide/Using Generic Platform Components/Extending Hildon Input Methods</title>
			<link>http://bugs.maemo.com/Documentation/Maemo_5_Developer_Guide/Using_Generic_Platform_Components/Extending_Hildon_Input_Methods</link>
			<guid>http://bugs.maemo.com/Documentation/Maemo_5_Developer_Guide/Using_Generic_Platform_Components/Extending_Hildon_Input_Methods</guid>
			<description>&lt;p&gt;Maemo:&amp;#32;moved Maemo 5 Developer Guide/Generic Platform Components/ Extending Hildon Input Methods to Maemo 5 Developer Guide/Generic Platform Components/Extending Hildon Input Methods&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=  Extending Hildon Input Methods =&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
Maemo platform is intended to be used on embedded devices. It is a quite straightforward request that one might want to have different input methods from the ones available by default, or just simply want a different layout for the virtual keyboard. For this reason, maemo 4.1 introduces a way to enable writing custom plug-ins for Hildon Input Method.&lt;br /&gt;
&lt;br /&gt;
This section describes writing a simple plug-in for Hildon Input Method. This example plug-in is going to implement a very basic virtual keyboard.&lt;br /&gt;
&lt;br /&gt;
The illustration below shows what area of the Hildon Input Method can be redefined with the custom plug-in.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div align=&amp;quot;CENTER&amp;quot;&amp;gt;[[Image:HIM-ui.png|Image HIM-ui]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Technically, the plug-in is an almost standard GTK widget (with additional steps to support dynamic loading). The widget of the plug-in will be placed in the Plug-in area.&lt;br /&gt;
&lt;br /&gt;
The illustration below shows the data flow of a user's input:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div align=&amp;quot;CENTER&amp;quot;&amp;gt;[[Image:HIM-comp.png|Image HIM-comp]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
User inputs directly to the plug-in, then the plug-in sends the inputted data to HIM main user interface. The HIM main UI will interact with the IM context, and then commit the inputted text to the client widget.&lt;br /&gt;
&lt;br /&gt;
In case of a custom plug-in, the plug-in itself - i.e. its writer - is responsible for handling all the inputs (even the buttons that are part of HIM main UI, e.g. tab or enter) and propagate them to the right modules (e.g. IM context).&lt;br /&gt;
&lt;br /&gt;
The function and outlook of the buttons in HIM main UI can be customized, but one cannot remove them completely from the UI - only dim them (see handwriting plug-in), and they cannot be rearranged (for further information, see section Common buttons).&lt;br /&gt;
&lt;br /&gt;
== Plug-in features ==&lt;br /&gt;
&lt;br /&gt;
Hildon Input Method plug-in must be a GTK widget. In addition to the GTK widget interface, the plug-in must implement certain functions.&lt;br /&gt;
&lt;br /&gt;
=== Interface ===&lt;br /&gt;
&lt;br /&gt;
As already mentioned, the plug-in must handle all the inputs - both real user input and management signals from the system - that are coming to the HIM main UI. The first step is to take a look at which functions need to be implemented and provided by the plug-in to the Hildon Input Method Plug-in Interface. Later on, it will be shown how these functions are actually registered for the HIM Plug-in Interface.&lt;br /&gt;
&lt;br /&gt;
The essential functions that must be implemented by a basic plug-in:&lt;br /&gt;
&lt;br /&gt;
* hildon-input-method/hildon-im-plugin.h&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;void&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(*&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;enable&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;HildonIMPlugin &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;plugin&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; gboolean init&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/tt&amp;gt;&lt;br /&gt;
'''enable''' is called whenever the plug-in becomes available to the user. '''init''' holds TRUE whenever this is the initialization time. hildon-input-method-plugins-example/src/him-vkb-example.c&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Called when the plugin is available to the user */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;static&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;void&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;enable&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;HildonIMPlugin &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;plugin&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; gboolean init&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   HimExampleVKBPrivate &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;priv&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   HimExampleVKB &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;vkb&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   vkb &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;HIMEXAMPLE_VKB&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;plugin&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   priv &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;HIMEXAMPLE_VKB_GET_PRIVATE&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;vkb&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;if&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;init &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;==&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; TRUE&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;hildon_im_ui_button_set_toggle&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;priv&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;-&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;ui&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
       HILDON_IM_BUTTON_MODE_A&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; TRUE&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;hildon_im_ui_button_set_toggle&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;priv&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;-&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;ui&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
       HILDON_IM_BUTTON_MODE_B&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; TRUE&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;hildon_im_ui_button_set_label&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;priv&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;-&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;ui&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
       HILDON_IM_BUTTON_MODE_A&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;ABC&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;hildon_im_ui_button_set_label&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;priv&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;-&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;ui&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
       HILDON_IM_BUTTON_MODE_B&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;Shift&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;hildon_im_ui_send_communication_message&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;priv&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;-&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;ui&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; HILDON_IM_CONTEXT_DIRECT_MODE&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
* hildon-input-method/hildon-im-plugin.h&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;void&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(*&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;disable&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;HildonIMPlugin &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;plugin&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/tt&amp;gt;&lt;br /&gt;
'''disable''' is called whenever the plug-in becomes unavailable to the user (e.g. when the main UI is closed). hildon-input-method-plugins-example/src/him-vkb-example.c&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Called when the plugin is disabled */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;static&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;void&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;disable&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;HildonIMPlugin &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;plugin&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* not implemented */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
* hildon-input-method/hildon-im-plugin.h&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;void&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(*&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;settings_changed&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;HildonIMPlugin &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;plugin&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                           &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;const&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; gchar &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;key&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                           &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;const&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; GConfValue &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;value&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/tt&amp;gt;&lt;br /&gt;
'''settings_changed''' is called whenever the HIM main UI receives a notification from GConf about Hildon Input Method settings being changed. The affected settings are all settings residing in '''/apps/osso/inputmethod''' path. '''key''' and '''value''' hold the GConf key and its value respectively. hildon-input-method-plugins-example/src/him-vkb-example.c&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Called when the standard input method settings &amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;  has been changed */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;static&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;void&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;settings_changed&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;HildonIMPlugin &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;plugin&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;const&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; gchar &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;key&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;const&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; GConfValue &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;value&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* not implemented */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
* hildon-input-method/hildon-im-plugin.h&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;void&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(*&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;input_mode_changed&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;HildonIMPlugin &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;plugin&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/tt&amp;gt;&lt;br /&gt;
'''input_mode_changed''' is called whenever the input mode is changed. Input mode is changed to what has been specified by the client widget. The input mode puts constraints to the plug-in to limit whether input shall be accepted or ignored. hildon-input-method-plugins-example/src/him-vkb-example.c&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Called when input mode changed */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;static&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;void&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;input_mode_changed&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;HildonIMPlugin &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;plugin&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* not implemented */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/tt&amp;gt;&lt;br /&gt;
* hildon-input-method/hildon-im-plugin.h&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;void&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(*&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;clear&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;HildonIMPlugin &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;plugin&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/tt&amp;gt;&lt;br /&gt;
'''clear''' is called whenever the HIM main UI requests the plug-in to clear or refresh its user interface. hildon-input-method-plugins-example/src/him-vkb-example.c&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Called when the plugin is requested to 'clear'/refresh its UI */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;static&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;void&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;clear&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;HildonIMPlugin &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;plugin&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* not implemented */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
* hildon-input-method/hildon-im-plugin.h&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;void&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(*&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;client_widget_changed&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;HildonIMPlugin &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;plugin&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/tt&amp;gt;&lt;br /&gt;
'''client_widget_changed''' is called whenever the client widget is changed from one to another. For instance, the case could be that the user taps on another text entry. hildon-input-method-plugins-example/src/him-vkb-example.c&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Called when the client widget changed */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;static&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;void&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;client_widget_changed&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;HildonIMPlugin &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;plugin&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* not implemented */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
* hildon-input-method/hildon-im-plugin.h&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;void&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(*&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;save_data&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;HildonIMPlugin &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;plugin&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/tt&amp;gt;&lt;br /&gt;
'''save_data''' is called whenever the HIM main UI is requested to save its (and the plug-in's) data. Usually it is called when the main UI is requested to quit. hildon-input-method-plugins-example/src/him-vkb-example.c&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Called when the plugin is requested to save its data */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;static&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;void&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;save_data&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;HildonIMPlugin &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;plugin&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* not implemented */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
* hildon-input-method/hildon-im-plugin.h&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;void&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(*&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;mode_a&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;HildonIMPlugin &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;plugin&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/tt&amp;gt;&lt;br /&gt;
'''mode_a''' is called whenever the ''Mode A'' (Caps Lock in virtual keyboard plug-in) is pressed. hildon-input-method-plugins-example/src/him-vkb-example.c&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Called when the MODE_A button is pressed */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;static&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;void&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;mode_a&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;HildonIMPlugin &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;plugin&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   HimExampleVKBPrivate &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;priv&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   HimExampleVKB &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;vkb&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   vkb &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;HIMEXAMPLE_VKB&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;plugin&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   priv &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;HIMEXAMPLE_VKB_GET_PRIVATE&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;vkb&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;if&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;hildon_im_ui_button_get_active&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;priv&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;-&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;ui&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
         HILDON_IM_BUTTON_MODE_B&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;))&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;hildon_im_ui_button_set_active&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;priv&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;-&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;ui&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
         HILDON_IM_BUTTON_MODE_B&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; FALSE&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;if&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;hildon_im_ui_button_get_active&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;priv&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;-&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;ui&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
         HILDON_IM_BUTTON_MODE_A&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;))&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
       priv&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;-&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;case_mode &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; CASE_UPPER&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;else&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
       priv&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;-&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;case_mode &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; CASE_LOWER&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;else&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;if&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;hildon_im_ui_button_get_active&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;priv&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;-&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;ui&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
         HILDON_IM_BUTTON_MODE_A&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;))&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
       priv&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;-&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;case_mode &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; CASE_UPPER&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;else&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
       priv&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;-&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;case_mode &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; CASE_LOWER&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;update_layout&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;vkb&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
* hildon-input-method/hildon-im-plugin.h&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;void&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(*&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;mode_b&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;HildonIMPlugin &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;plugin&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/tt&amp;gt;&lt;br /&gt;
'''mode_b''' is called whenever the ''Mode B'' (Shift in virtual keyboard plug-in) is pressed. hildon-input-method-plugins-example/src/him-vkb-example.c&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Called when the MODE_B button is pressed */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;static&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;void&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;mode_b&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;HildonIMPlugin &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;plugin&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   HimExampleVKBPrivate &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;priv&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   HimExampleVKB &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;vkb&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   vkb &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;HIMEXAMPLE_VKB&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;plugin&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   priv &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;HIMEXAMPLE_VKB_GET_PRIVATE&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;vkb&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;if&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;hildon_im_ui_button_get_active&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;priv&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;-&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;ui&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
         HILDON_IM_BUTTON_MODE_B&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;))&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;if&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;hildon_im_ui_button_get_active&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;priv&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;-&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;ui&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
         HILDON_IM_BUTTON_MODE_A&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;))&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
       priv&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;-&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;case_mode &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; CASE_LOWER&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;else&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
       priv&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;-&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;case_mode &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; CASE_UPPER&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;else&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;if&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;hildon_im_ui_button_get_active&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;priv&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;-&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;ui&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
         HILDON_IM_BUTTON_MODE_A&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;))&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
       priv&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;-&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;case_mode &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; CASE_UPPER&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;else&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
       priv&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;-&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;case_mode &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; CASE_LOWER&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;update_layout&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;vkb&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
* hildon-input-method/hildon-im-plugin.h&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;void&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(*&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;backspace&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;HildonIMPlugin &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;plugin&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/tt&amp;gt;&lt;br /&gt;
'''backspace''' is called whenever the virtual backspace key is pressed. hildon-input-method-plugins-example/src/him-vkb-example.c&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Called when the backspace button is pressed */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;static&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;void&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;backspace&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;HildonIMPlugin &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;plugin&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   HimExampleVKBPrivate &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;priv&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   priv &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;HIMEXAMPLE_VKB_GET_PRIVATE&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;HIMEXAMPLE_VKB&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;plugin&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;));&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;hildon_im_ui_send_communication_message&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;priv&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;-&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;ui&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
       HILDON_IM_CONTEXT_HANDLE_BACKSPACE&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
* hildon-input-method/hildon-im-plugin.h&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;void&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(*&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;enter&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;HildonIMPlugin &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;plugin&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/tt&amp;gt;&lt;br /&gt;
'''enter''' is called whenever the virtual enter key is pressed. hildon-input-method-plugins-example/src/him-vkb-example.c&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Called when the enter button is pressed */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;static&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;void&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;enter&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;HildonIMPlugin &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;plugin&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   HimExampleVKBPrivate &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;priv&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   priv &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;HIMEXAMPLE_VKB_GET_PRIVATE&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;HIMEXAMPLE_VKB&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;plugin&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;));&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;hildon_im_ui_send_communication_message&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;priv&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;-&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;ui&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
       HILDON_IM_CONTEXT_HANDLE_ENTER&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
* hildon-input-method/hildon-im-plugin.h&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;void&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(*&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;tab&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;HildonIMPlugin &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;plugin&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/tt&amp;gt;&lt;br /&gt;
'''tab''' is called whenever the virtual tab key is pressed. hildon-input-method-plugins-example/src/him-vkb-example.c&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Called when the tab button is pressed */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;static&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;void&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;tab&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;HildonIMPlugin &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;plugin&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   HimExampleVKBPrivate &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;priv&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   priv &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;HIMEXAMPLE_VKB_GET_PRIVATE&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;HIMEXAMPLE_VKB&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;plugin&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;));&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;hildon_im_ui_send_communication_message&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;priv&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;-&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;ui&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
       HILDON_IM_CONTEXT_HANDLE_TAB&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Couple of functions related to changing language:&lt;br /&gt;
&lt;br /&gt;
* hildon-input-method/hildon-im-plugin.h&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;void&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(*&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;language&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;HildonIMPlugin &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;plugin&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/tt&amp;gt;&lt;br /&gt;
'''language''' is called whenever a new language is selected from the HIM main UI menu. hildon-input-method-plugins-example/src/him-vkb-example.c&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Called when the language has been changed */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;static&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;void&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;language&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;HildonIMPlugin &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;plugin&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* not implemented */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
* hildon-input-method/hildon-im-plugin.h&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;void&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(*&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;language_settings_changed&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;HildonIMPlugin &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;plugin&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; gint index&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/tt&amp;gt;&lt;br /&gt;
'''language_settings_changed''' is called whenever the language settings for the specified language index have been changed.&lt;br /&gt;
&lt;br /&gt;
=== Plug-in Loading ===&lt;br /&gt;
&lt;br /&gt;
A nature of a plug-in is that it can be dynamically loaded. In this case also, the HIM plug-in is loaded whenever the user selects it, so in order to support the dynamic loading, the plug-in has to provide the following three specific functions for Hildon Input Method plug-in system:&lt;br /&gt;
&lt;br /&gt;
*  &amp;lt;tt&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;void&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;module_init&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;GTypeModule &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;module&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/tt&amp;gt;&lt;br /&gt;
This function initializes the plug-in as a module, meaning the type of GTypeInfo needs to be registered, and the interface and instance information (GInterfaceInfo) need to be added to the module. hildon-input-method-plugins-example/src/him-vkb-example.c&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;void&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;module_init&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;GTypeModule &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;module&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;static&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;const&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; GTypeInfo type_info &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;sizeof&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;HimExampleVKBClass&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;),&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     NULL&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* base_init */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
     NULL&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* base_finalize */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;GClassInitFunc&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; himExample_vkb_class_init&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     NULL&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* class_finalize */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
     NULL&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* class_data */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;sizeof&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;HimExampleVKB&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;),&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#993399&amp;quot;&amp;gt;0&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* n_preallocs */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;GInstanceInitFunc&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; himExample_vkb_init&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;static&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;const&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; GInterfaceInfo plugin_info &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;GInterfaceInitFunc&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; himExample_vkb_iface_init&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     NULL&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* interface_finalize */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
     NULL&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* interface_data */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   himExample_vkb_type &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
           &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_type_module_register_type&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;module&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                                       GTK_TYPE_WIDGET&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;HimExampleVKB&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                                       &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;amp;amp;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;type_info&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                                       &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#993399&amp;quot;&amp;gt;0&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;g_type_module_add_interface&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;module&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                               HIMEXAMPLE_VKB_TYPE&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                               HILDON_IM_TYPE_PLUGIN&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                               &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;amp;amp;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;plugin_info&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
The '''himExample_vkb_iface_init''' function should register the custom interface functions in '''HildonIMPluginIface'''&amp;lt;nowiki&amp;gt;: &amp;lt;/nowiki&amp;gt;hildon-input-method-plugins-example/src/him-vkb-example.c&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Standard GTK stuff */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;static&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;void&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;himExample_vkb_iface_init&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;HildonIMPluginIface &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;iface&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   iface&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;-&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;enable &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; enable&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   iface&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;-&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;disable &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; disable&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   iface&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;-&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;enter &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; enter&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   iface&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;-&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;tab &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; tab&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   iface&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;-&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;backspace &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; backspace&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   iface&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;-&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;clear &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; clear&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   iface&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;-&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;input_mode_changed &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; input_mode_changed&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   iface&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;-&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;client_widget_changed &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; client_widget_changed&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   iface&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;-&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;save_data &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; save_data&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   iface&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;-&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;language &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; language&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   iface&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;-&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;mode_a &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; mode_a&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   iface&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;-&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;mode_b &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; mode_b&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   iface&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;-&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;language_settings_changed &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; language_settings_changed&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   iface&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;-&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;settings_changed &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; settings_changed&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;return&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
*  &amp;lt;tt&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;void&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;module_exit&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;void&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/tt&amp;gt;&lt;br /&gt;
This function defines actions when the module is unloaded from the memory. hildon-input-method-plugins-example/src/him-vkb-example.c&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;void&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;module_exit&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;void&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* empty */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
*  &amp;lt;tt&amp;gt;HildonIMPlugin&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;module_create&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;HildonIMUI &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;ui&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/tt&amp;gt;&lt;br /&gt;
This function creates and returns the plug-in widget to the main UI. hildon-input-method-plugins-example/src/him-vkb-example.c&lt;br /&gt;
 &amp;lt;tt&amp;gt;HildonIMPlugin&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;module_create&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;HildonIMUI &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;keyboard&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;return&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;HILDON_IM_PLUGIN&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;himExample_vkb_new&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;keyboard&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;));&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Plug-in Info ===&lt;br /&gt;
&lt;br /&gt;
Some basic information of the plug-in needs to be provided to the HIM plug-in system, so it can keep up with the kinds of plug-ins that are available in the system. This is performed with two specific functions:&lt;br /&gt;
&lt;br /&gt;
*  &amp;lt;tt&amp;gt;&amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;const&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; HildonIMPluginInfo&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;hildon_im_plugin_get_info&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;void&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/tt&amp;gt;&lt;br /&gt;
The function creates '''HildonIMPluginInfo''' struct for providing the required information. hildon-input-method-plugins-example/src/him-vkb-example.c&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* Input Method plugin information.&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * This structure tells the main UI about this plugin */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;const&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; HildonIMPluginInfo &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;hildon_im_plugin_get_info&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;void&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;static&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;const&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; HildonIMPluginInfo info &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;HIM VKB Example&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;                  &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* description */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;himExample_vkb&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;                   &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* name */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;Keyboard (EXAMPLE)&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;               &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* menu title */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
     NULL&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;                               &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* gettext domain */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
     TRUE&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;                               &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* visible in menu */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
     FALSE&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;                              &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* cached */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
     HILDON_IM_TYPE_DEFAULT&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;             &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* UI type */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
     HILDON_IM_GROUP_LATIN&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;              &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* group */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
     HILDON_IM_DEFAULT_PLUGIN_PRIORITY&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;  &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* priority */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
     NULL&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;                               &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* special character plugin */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;                                 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* help page */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
     FALSE&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;                              &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* disable common UI buttons */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
     HILDON_IM_DEFAULT_HEIGHT&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;           &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* plugin height */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
     HILDON_IM_TRIGGER_STYLUS            &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/* trigger */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;return&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;amp;amp;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;info&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
*  &amp;lt;tt&amp;gt;gchar&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;**&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;hildon_im_plugin_get_available_languages&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;gboolean &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;free&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/tt&amp;gt;&lt;br /&gt;
The function returns a NULL terminated array of string, containing language codes supported by the plug-in. Set '''free''' to '''TRUE''' if HIM main UI should free the returned value when no longer used. hildon-input-method-plugins-example/src/him-vkb-example.c&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt;/*&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * This function returns the list of available languages supported&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * by the plugin.&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#9A1900&amp;quot;&amp;gt; * */&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;''&amp;lt;/span&amp;gt;&lt;br /&gt;
 gchar &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;**&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;hildon_im_plugin_get_available_languages&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;gboolean &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;free&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;)&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;static&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; gchar &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;list&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;[]&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;{&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;quot;en_GB&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; NULL &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;free &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; FALSE&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;return&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; list&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;;&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;}&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==  Interaction with main user interface ==&lt;br /&gt;
&lt;br /&gt;
As mentioned above, the plug-in is placed inside the HIM main UI. This section deals with interacting with it. This is mainly done by calling its functions, as defined in '''hildon-im-ui.h'''.&lt;br /&gt;
&lt;br /&gt;
=== Handling Input ===&lt;br /&gt;
&lt;br /&gt;
hildon-input-method/hildon-im-ui.h&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;void&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;hildon_im_ui_send_utf8&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;HildonIMUI &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;main_ui&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;const&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; gchar &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;text&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The plug-in can request the main UI to commit a UTF-8 encoded text by calling this function. hildon-input-method/hildon-im-ui.h&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;void&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;hildon_im_ui_send_communication_message&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;HildonIMUI &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;main_ui&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; gint message&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The plug-in can use this function to tell the main UI that '''Enter''', '''Backspace''', or '''Tab''' virtual buttons are pressed. Simply call this function and pass one of the constants below as the '''message''' argument:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;HILDON_IM_CONTEXT_HANDLE_ENTER&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;HILDON_IM_CONTEXT_HANDLE_BACKSPACE&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;HILDON_IM_CONTEXT_HANDLE_TAB&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== UI Visibility ===&lt;br /&gt;
&lt;br /&gt;
hildon-input-method/hildon-im-ui.h&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;void&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;hildon_im_ui_set_visible&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;HildonIMUI &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;ui&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; gboolean visible&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The plug-in can request the main UI to set it's visibility by calling this function. hildon-input-method/hildon-im-ui.h&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tt&amp;gt;gboolean &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;hildon_im_ui_get_visibility&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;HildonIMUI &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;main_ui&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
By calling this function, the plug-in can get the visibility status of the main UI.&lt;br /&gt;
&lt;br /&gt;
=== Get Input Method State ===&lt;br /&gt;
&lt;br /&gt;
The following two state reader functions could be very handy in case the plug-in receives a state change notification (e.g. language change), because this way all the state information does not need to be saved. hildon-input-method/hildon-im-ui.h&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tt&amp;gt;HildonIMCommand &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;hildon_im_ui_get_autocase_mode&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;HildonIMUI &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;main_ui&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The function returns the auto-capitalization mode of the current client widget. hildon-input-method/hildon-im-ui.h&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;const&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; gchar &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;hildon_im_ui_get_active_language&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;HildonIMUI &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;main_ui&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The function returns the current language code.&lt;br /&gt;
&lt;br /&gt;
=== Common Buttons ===&lt;br /&gt;
&lt;br /&gt;
As mentioned in the ''Overview'' section, the outlook and even the function of the buttons in the main UI can be modified. '''N.B.''' It is not recommended to alter buttons, except the ''Mode A'' and ''Mode B'' buttons! Other buttons may have hardwired behavior within the main UI.&lt;br /&gt;
&lt;br /&gt;
If the plug-in changes the functionality of a button, one might want to reflect this also in the UI by changing the label of the button. The layout of the buttons can be altered by the following two functions:&lt;br /&gt;
&lt;br /&gt;
* hildon-input-method/hildon-im-ui.h&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;void&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;hildon_im_ui_button_set_label&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;HildonIMUI &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;keyboard&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                                    HildonIMButton button&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                                    &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;const&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; gchar &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;label&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/tt&amp;gt;&lt;br /&gt;
With this function, the plug-in can set the label of a button.&lt;br /&gt;
Possible values of '''HildonIMButton''' (see '''hildon-im-ui.h'''):&lt;br /&gt;
** &amp;lt;code&amp;gt;HILDON_IM_BUTTON_TAB&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;HILDON_IM_BUTTON_MODE_A&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;HILDON_IM_BUTTON_MODE_B&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;HILDON_IM_BUTTON_INPUT_MENU&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;HILDON_IM_BUTTON_BACKSPACE&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;HILDON_IM_BUTTON_ENTER&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;HILDON_IM_BUTTON_SPECIAL_CHAR&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;BUTTON_CLOSE&amp;lt;/code&amp;gt;&lt;br /&gt;
* hildon-input-method/hildon-im-ui.h&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;void&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;hildon_im_ui_button_set_id&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;HildonIMUI &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;self&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                                 HildonIMButton button&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                                 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;const&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; gchar &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;id&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/tt&amp;gt;&lt;br /&gt;
This function sets a name to a particular button.&lt;br /&gt;
&lt;br /&gt;
Since every input to the HIM main UI is caught by the plug-in, it is necessary to keep the button state (active or in-active) in sync. The state of a particular button can be changed, queried and toggled with the following functions:&lt;br /&gt;
&lt;br /&gt;
* hildon-input-method/hildon-im-ui.h&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;void&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;hildon_im_ui_button_set_active&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;HildonIMUI &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;keyboard&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                                     HildonIMButton button&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                                     gboolean active&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/tt&amp;gt;&lt;br /&gt;
This function sets the active state of a particular button.&lt;br /&gt;
* hildon-input-method/hildon-im-ui.h&lt;br /&gt;
 &amp;lt;tt&amp;gt;gboolean &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;hildon_im_ui_button_get_active&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;HildonIMUI &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;keyboard&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                                         HildonIMButton button&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/tt&amp;gt;&lt;br /&gt;
This function returns the active state of a particular button.&lt;br /&gt;
* hildon-input-method/hildon-im-ui.h&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;void&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;hildon_im_ui_button_set_toggle&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;HildonIMUI &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;keyboard&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                                     HildonIMButton button&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                                     gboolean toggle&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/tt&amp;gt;&lt;br /&gt;
The plug-in can set the toggle state of a particular button with this function.&lt;br /&gt;
&lt;br /&gt;
Miscellaneous button manipulation functions:&lt;br /&gt;
&lt;br /&gt;
* hildon-input-method/hildon-im-ui.h&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;void&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;hildon_im_ui_button_set_menu&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;HildonIMUI &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;keyboard&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                                   HildonIMButton button&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                                   GtkWidget &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;menu&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/tt&amp;gt;&lt;br /&gt;
With this function, the plug-in can attach a menu - which is a GtkWidget - to a particular button.&lt;br /&gt;
* hildon-input-method/hildon-im-ui.h&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;void&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;hildon_im_ui_button_set_sensitive&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;HildonIMUI &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;keyboard&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                                        HildonIMButton button&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                                        gboolean sensitive&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/tt&amp;gt;&lt;br /&gt;
All the buttons defined on the HIM main UI may not be needed, or the functionality of a button may be wished to be switched off in some states. In this case, the sensitivity of a particular button can be set by calling this function.&lt;br /&gt;
* hildon-input-method/hildon-im-ui.h&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#009900&amp;quot;&amp;gt;void&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000000&amp;quot;&amp;gt;hildon_im_ui_button_set_repeat&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;HildonIMUI &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;keyboard&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                                     HildonIMButton button&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;,&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
                                     gboolean repeat&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#990000&amp;quot;&amp;gt;);&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/tt&amp;gt;&lt;br /&gt;
This function controls whether a particular button will repeat when pressed for a long time.&lt;br /&gt;
&lt;br /&gt;
== Component dependencies ==&lt;br /&gt;
&lt;br /&gt;
At least the following headers shall be included in the plug-in:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000080&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;#include&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;amp;lt;hildon-im-plugin.h&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span&amp;gt;'''&amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#000080&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;#include&amp;lt;/nowiki&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;'''&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&amp;lt;font color=&amp;quot;#FF0000&amp;quot;&amp;gt;&amp;amp;lt;hildon-im-ui.h&amp;amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''hildon-input-method-framework-dev''' and '''libhildon-im-ui-dev''' packages.&lt;br /&gt;
&lt;br /&gt;
== Language codes ==&lt;br /&gt;
&lt;br /&gt;
These are the language codes recognized; they are numbered, the first, af_ZA, being 0. &lt;br /&gt;
&lt;br /&gt;
 af_ZA am_ET ar_AE ar_BH ar_DZ ar_EG ar_IN ar_IQ ar_JO ar_KW&lt;br /&gt;
 ar_LB ar_LY ar_MA ar_OM ar_QA ar_SA ar_SD ar_SY ar_TN ar_YE &lt;br /&gt;
 az_AZ be_BY bg_BG bn_IN br_FR bs_BA ca_ES cs_CZ cy_GB da_DK &lt;br /&gt;
 de_AT de_BE de_CH de_DE de_LU el_GR en_AU en_BW en_CA en_DK &lt;br /&gt;
 en_GB en_HK en_IE en_IN en_NZ en_PH en_SG en_US en_ZA en_ZW &lt;br /&gt;
 eo_EO es_AR es_BO es_CL es_CO es_CR es_DO es_EC es_ES es_GT &lt;br /&gt;
 es_HN es_MX es_NI es_PA es_PE es_PR es_PY es_SV es_US es_UY &lt;br /&gt;
 es_VE et_EE eu_ES fa_IR fi_FI fo_FO fr_BE fr_CA fr_CH fr_FR &lt;br /&gt;
 fr_LU ga_IE gd_GB gl_ES gv_GB he_IL hi_IN hr_HR hu_HU hy_AM &lt;br /&gt;
 id_ID is_IS it_CH it_IT iw_IL ja_JP ka_GE kl_GL ko_KR kw_GB &lt;br /&gt;
 lt_LT lv_LV mi_NZ mk_MK mr_IN ms_MY mt_MT nl_BE nl_NL nn_NO &lt;br /&gt;
 no_NO oc_FR pl_PL pt_BR pt_PT ro_RO ru_RU ru_UA se_NO sk_SK &lt;br /&gt;
 sl_SI sq_AL sr_YU sv_FI sv_SE ta_IN te_IN tg_TJ th_TH ti_ER &lt;br /&gt;
 ti_ET tl_PH tr_TR tt_RU uk_UA ur_PK uz_UZ vi_VN wa_BE yi_US &lt;br /&gt;
 zh_CN zh_HK zh_SG zh_TW&lt;/div&gt;</description>
			<pubDate>Wed, 02 Sep 2009 12:19:49 GMT</pubDate>			<dc:creator>Maemo</dc:creator>			<comments>http://bugs.maemo.com/Talk:Documentation/Maemo_5_Developer_Guide/Using_Generic_Platform_Components/Extending_Hildon_Input_Methods</comments>		</item>
		<item>
			<title>Documentation/Maemo 5 Developer Guide/Architecture/UI Framework</title>
			<link>http://bugs.maemo.com/Documentation/Maemo_5_Developer_Guide/Architecture/UI_Framework</link>
			<guid>http://bugs.maemo.com/Documentation/Maemo_5_Developer_Guide/Architecture/UI_Framework</guid>
			<description>&lt;p&gt;Maemo:&amp;#32;/* Status menu plugin API */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=UI Framework=&lt;br /&gt;
The Fremantle UI Framework consists of the Clutter OpenGL-based canvas library, OpenGL drivers for the PowerVR SGX chip, Matchbox Window Manager 1 (for startup sequence) and Matchbox Window Manager 2 library, Hildon Welcome (“Nokia hands”) screen, Startup Wizard, application framework startup scripts, game startup system, Hildon Control Panel, some Control Panel applets, Restore original settings &amp;amp; Clear user data framework, Hildon Input Methods, internationalisation i.e. so-called POSIX data, Clipboard Manager, Hildon Desktop, notiﬁcation service, Hildon Home (applet loader), Hildon Status Menu/Area (plugin loader), and Status Menu USB plugin. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==System Decomposition view==&lt;br /&gt;
&lt;br /&gt;
===Subsystems in UI framework domain===&lt;br /&gt;
{|cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|'''Subsystem'''||'''Function'''&lt;br /&gt;
|-&lt;br /&gt;
|hildon-desktop||OpenGL graphics API&lt;br /&gt;
|-&lt;br /&gt;
|hildon-home||Home widget API and loading, notification service and plugins, background image and loading&lt;br /&gt;
|-&lt;br /&gt;
|hildon-status-menu||X clipboard selection management&lt;br /&gt;
|-&lt;br /&gt;
|Hildon Input Method||Localized text input UI&lt;br /&gt;
|-&lt;br /&gt;
|Control Panel||Control Panel applet and loading&lt;br /&gt;
|-&lt;br /&gt;
|Startup Wizard||first boot and system time setting&lt;br /&gt;
|-&lt;br /&gt;
|Startup scripts||AF startup scripts&lt;br /&gt;
|-&lt;br /&gt;
|RFS and CUD framework||Reset factory settings and clear user data&lt;br /&gt;
|-&lt;br /&gt;
|I18 data||POSIX data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===hildon-desktop===&lt;br /&gt;
The hildon-desktop process acts as a compositing window manager for all applications. All screen painting, including painting of X windows, is done through the Clutter canvas library and OpenGL ES v2.0 API. Compositing means that hildon-desktop tells the X server (through the X Composite extension) to draw all windows to an off-screen buffer, instead of drawing them directly to the framebuffer. This allows hildon-desktop to modify window contents before drawing them onto the screen. &lt;br /&gt;
&lt;br /&gt;
In Fremantle, compositing is used to implement window transitions and blurring of the screen. hildon-desktop handles all mapped windows as Clutter actors, which are objects usually containing an OpenGL texture. As the window manager hildon-desktop will reparent application windows to decorate them with the application title bar and close button. Windows on the screen will normally be oriented in landscape, but the window manager will have a limited support for portrait mode, using the Xrandr extension. &lt;br /&gt;
&lt;br /&gt;
Task launcher and Task switcher (aka. Dashboard, Task navigator) is implemented by the hildon-desktop process. Task launcher is a menu the user can access to start new applications or bring running applications on top. Task switcher is a view to switch between running applications, some of which might be ’background killed’, which means that they appear running to the user but really have saved their UI state and are started by hildon-desktop on demand. Task launcher and switcher UI transitions could be challenging to implement with traditional toolkits, but hildon-desktop can use Clutter and hildon-desktop’s internal data about application windows to give a good performance. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:hildon-desktop_decomposition.png|800px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Low memory and background killing D-Bus signals====&lt;br /&gt;
The hildon-desktop process will listen to D-Bus signals warning about low-memory (RAM) situation (preventing starting of new applications) and signals suggesting starting background killing of applications that are running in the background. These signals are broadcast on the system bus by the hulda daemon (of Data Management). Only the applications that have told hildon-desktop that they can be background killed are considered for background killing. The property is set with the ''hildon_program_set_can_hibernate'' function in the libhildon1 library. &lt;br /&gt;
The background killing signals are defined as follows:&lt;br /&gt;
&lt;br /&gt;
{|cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|'''Attribute'|'''Value'''&lt;br /&gt;
|-&lt;br /&gt;
|service||(ignored)&lt;br /&gt;
|-&lt;br /&gt;
|interface||com.nokia.ke_recv.bgkill_on&lt;br /&gt;
|-&lt;br /&gt;
|object path||/com/nokia/ke-recv/bgkill_on&lt;br /&gt;
|-&lt;br /&gt;
|member||bgkill_on&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|'''Attribute'''||'''Value'''&lt;br /&gt;
|-&lt;br /&gt;
|service||(ignored)&lt;br /&gt;
|-&lt;br /&gt;
|interface||com.nokia.ke_recv.bgkill_off&lt;br /&gt;
|-&lt;br /&gt;
|object path||/com/nokia/ke-recv/bgkill_off&lt;br /&gt;
|-&lt;br /&gt;
|member||bgkill_off&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The low-memory signals are defined as follows. Notice that these low-memory signals are not meant to be used outside of the application framework, there are separate signals (user lowmem on and user lowmem off ) for applications. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|'''Attribute'''||'''Value'''&lt;br /&gt;
|-&lt;br /&gt;
|service||(ignored)&lt;br /&gt;
|-&lt;br /&gt;
|interface||com.nokia.ke_recv.lowmem_on&lt;br /&gt;
|-&lt;br /&gt;
|object path||/com/nokia/ke-recv/lowmem_on&lt;br /&gt;
|-&lt;br /&gt;
|member||bgkill_off&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|'''Attribute'''||'''Value'''&lt;br /&gt;
|-&lt;br /&gt;
|service||(ignored)&lt;br /&gt;
|-&lt;br /&gt;
|interface||com.nokia.ke_recv.lowmem_off&lt;br /&gt;
|-&lt;br /&gt;
|object path||/com/nokia/ke-recv/lowmem_off&lt;br /&gt;
|-&lt;br /&gt;
|member||bgkill_off&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====D-Bus signal for closing applications====&lt;br /&gt;
The hildon-desktop process will listen to the ’exit’ D-Bus signal. When it catches the signal, it sends the (POSIX) TERM signal to all running windowed applications. This is used by the Backup application before restoring backed up data and settings, Backup itself can ignore the TERM signal. The signal is not meant to be used outside of the application framework. &lt;br /&gt;
&lt;br /&gt;
{|cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|'''Attribute'''||'''Value'''&lt;br /&gt;
|-&lt;br /&gt;
|service||(ignored)&lt;br /&gt;
|-&lt;br /&gt;
|interface||com.nokia.osso_app_killer&lt;br /&gt;
|-&lt;br /&gt;
|object path||/com/nokia/osso_app_killer&lt;br /&gt;
|-&lt;br /&gt;
|member||exit&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====D-Bus signal for ‘application died’ information note====&lt;br /&gt;
The hildon-desktop process will have a D-Bus service for showing the ’application died’ information note. The service is used by the maemo-launcher daemon, when an application started by maemo-launcher dies, it causes showing of the note by broadcasting the following signal. &lt;br /&gt;
&lt;br /&gt;
{|cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|'''Attribute'''||'''Value'''&lt;br /&gt;
|-&lt;br /&gt;
|service||(ignored)&lt;br /&gt;
|-&lt;br /&gt;
|interface||org.maemo.launcher&lt;br /&gt;
|-&lt;br /&gt;
|object path||org/maemo/launcher&lt;br /&gt;
|-&lt;br /&gt;
|member||Application Died&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|'''Argument #'''||'''Mandatory'''||'''Type'''||'''Value'''&lt;br /&gt;
|-&lt;br /&gt;
|1||yes||DBUS TYPE STRING||ﬁle name of the executable&lt;br /&gt;
|-&lt;br /&gt;
|2||yes||DBUS TYPE INT32||PID of the died process&lt;br /&gt;
|-&lt;br /&gt;
|3||yes||DBUS TYPE INT32||exit code returned from waitpid()&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====D-Bus service for application launching====&lt;br /&gt;
hildon-desktop implements a D-Bus interface for launching applications. Application can be started by sending the D-Bus message mentioned in Section 6.2. &lt;br /&gt;
&lt;br /&gt;
====D-Bus service for moving from fullscreen application to Task switcher====&lt;br /&gt;
Fullscreen applications cannot be minimised with a hardware key because there is no key reserved for that, so hildon-desktop provides a D-Bus interface for requesting it. This can be done by sending the following D-Bus signal. &lt;br /&gt;
&lt;br /&gt;
{|cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|'''Attribute'''||'''Value'''&lt;br /&gt;
|-&lt;br /&gt;
|service||(ignored)&lt;br /&gt;
|-&lt;br /&gt;
|interface||com.nokia.hildon_desktop&lt;br /&gt;
|-&lt;br /&gt;
||object path||(ignored)&lt;br /&gt;
|-&lt;br /&gt;
|member||exit_app_view&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Shutdown signal====&lt;br /&gt;
hildon-desktop catches the following D-Bus signal on the system bus.&lt;br /&gt;
&lt;br /&gt;
{|cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|'''Attribute'''||'''Value'''&lt;br /&gt;
|-&lt;br /&gt;
|service||(ignored)&lt;br /&gt;
|-&lt;br /&gt;
|interface||com.nokia.mce.signal&lt;br /&gt;
|-&lt;br /&gt;
|object path||com/nokia/mce/signal&lt;br /&gt;
|-&lt;br /&gt;
|member||shutdown_ind&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Portrait mode API in window manager====&lt;br /&gt;
The hildon-desktop process has a limited support for the portrait mode. The current thinking is that an application ﬂags a window with a special window property when the whole screen should be turned to the portrait mode. The application will use the accelerometer’s output and its internal state for the decision to set the ﬂag.&lt;br /&gt;
&lt;br /&gt;
The ﬂag will only be a hint for the window manager, though, because there could be a dialog waiting for the user’s input open, and then the portrait mode will not be entered until the dialog is closed.&lt;br /&gt;
The current plan is that most dialogs appearing in the portrait mode would cause transition back to the landscape mode before showing the dialog. The dialogs that support both modes would be ﬂagged for the window manager by the application. The Status area window is not sensitive to input in the portrait mode, and the Tasks button will not be visible there. Incoming event windows will be shown in both landscape and portrait modes. Text input methods will not be supported in the portrait mode, i.e. there is no on-screen keyboard in the portrait mode. The Xrandr extension is used to change the screen orientation.&lt;br /&gt;
&lt;br /&gt;
====Hardware keyboard key bindings====&lt;br /&gt;
In Diablo, there is a set of keys under the Gconf path /apps/osso/keybindings to conﬁgure what hardware key (home, power, menu, fullscreen, etc.) shortcuts do in the desktop. In Fremantle, there are no key bindings for hildon-desktop.&lt;br /&gt;
&lt;br /&gt;
====Full screen mode====&lt;br /&gt;
Applications can request to go in and out of the full screen mode by using the ''gtk window_fullscreen()'' and ''gtk window unfullscreen()'' functions. The WM will see the desired mode from a window property. See the [http://library.gnome.org/devel/gtk/stable/GtkWindow.html#gtk-window-fullscreen Gtk+ documentation] for more information.&lt;br /&gt;
&lt;br /&gt;
==hildon-home==&lt;br /&gt;
The hildon-home process implements loading of Home applets, notiﬁcation service, and loading of Home background images. There are multiple Home views, and the user can select between them by horizontally scrolling the screen. Each of the views can have a different set of dynamically loaded Home applets, a small Gtk+ applications with their own, possibly transparent, X window displayed on top of the Home background. Home has a layout mode in which the applet windows can be moved, resized, and dragged to a neighbouring Home view. &lt;br /&gt;
&lt;br /&gt;
hildon-desktop handles positioning and displaying of the Home applets and background pictures according to the currently selected Home view. hildon-desktop also implements the Home layout mode in cooperation with hildon-home. Home ﬂags the applet windows with speciﬁc window properties to tell hildon-desktop to handle them in a special way. Home also stores the applet positions and the Home view where they are active to GConf for hildon-desktop. &lt;br /&gt;
&lt;br /&gt;
hildon-home provides a service on the D-Bus session bus to display notiﬁcations on the screen, based on a proposed freedesktop.org Desktop Notiﬁcation Speciﬁcation6 . Typical notiﬁcations are incoming e-mails, chat messages, and missed phone calls. The service supports persistent notiﬁcations that are retained over a reboot, simple dialogs with return values, and queueing of notiﬁcations. It is also possible to install plugins for the notification service, e.g. to support sound and vibration effects in connection to notifications. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:hildon-home_components.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Notification D-Bus service===&lt;br /&gt;
The hildon-home process provides the Desktop Notiﬁcation Speciﬁcation D-Bus API documented in [http://www.galago-project.org/specs/notification/0.9/notification-spec-0.9.txt specification]. Notification can be specified to be persistent over device reboots by giving the ‘persistent’ hint in the D-Bus message. &lt;br /&gt;
The org.freedesktop.Notiﬁcations interface recognises the following two additional messages for backwards compatibility. &lt;br /&gt;
&lt;br /&gt;
====System information banner====&lt;br /&gt;
The following D-Bus message can be used to show a system information banner. This is used by the Libosso function osso system note infoprint. The ’standard’ Notiﬁcations API should be preferred over this for new applications. &lt;br /&gt;
&lt;br /&gt;
{|cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|'''Attribute'''||'''Value'''&lt;br /&gt;
|-&lt;br /&gt;
|service||org.freedesktop.Notifications&lt;br /&gt;
|-&lt;br /&gt;
|interface||org.freedesktop.Notifications&lt;br /&gt;
|–&lt;br /&gt;
|object path||/org/freedesktop/Notifications&lt;br /&gt;
|-&lt;br /&gt;
|member||SystemNoteInfoprint&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|'''Argument #'''||'''Mandatory'''||'''Type'''||'''Value'''&lt;br /&gt;
|-&lt;br /&gt;
|1||yes||DBUS TYPE STRING||message to show&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The return value is of the type DBUS TYPE UINT32, it is the ID of the notiﬁcation.&lt;br /&gt;
&lt;br /&gt;
====System information note====&lt;br /&gt;
The following D-Bus message can be used to show a system information note. This is used by the Libosso function osso system note dialog. The ‘standard’ Notiﬁcations API should be preferred over this for new applications. &lt;br /&gt;
&lt;br /&gt;
{|cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|'''Attribute'''||'''Value'''&lt;br /&gt;
|-&lt;br /&gt;
|'''service'''||org.freedesktop.Notifications&lt;br /&gt;
|-&lt;br /&gt;
|'''interface'''||org.freedesktop.Notifications&lt;br /&gt;
|-&lt;br /&gt;
|'''object path'''||/org/freedesktop/Notifications&lt;br /&gt;
|-&lt;br /&gt;
|'''member'''||SystemNoteDialog&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot; width=&amp;quot;70%&amp;quot;&lt;br /&gt;
|'''Argument #'''||'''Mandatory'''||'''Type'''||'''Value'''&lt;br /&gt;
|-&lt;br /&gt;
|1||yes||DBUS TYPE STRING||message to show&lt;br /&gt;
|-&lt;br /&gt;
|2||yes||DBUT_TYPE_UNIT32||type of dialog, one of OSSO_GN_*&lt;br /&gt;
|3||yes||DBUS_TYPE_STRING||label of the button&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The return value is of the type DBUS TYPE UINT32, it is the ID of the notiﬁcation. The dialog’s return value can be retrieved by listening to the NotiﬁcationClosed signal that bears the ID.&lt;br /&gt;
&lt;br /&gt;
===Notification plugin interface===&lt;br /&gt;
The notiﬁcation service supports plugins for e.g. sound and vibration functionality. The &lt;br /&gt;
plugin code is not allowed to block. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Home plugin Public API===&lt;br /&gt;
*Every Home applet inherits from HDHomePluginItem GObject class. HDHomePluginItem is a descendant of GtkWindow, so to add a widget to the Home applet, you should use the ''gtk_container_add()'' function. *Visibility of the applet is handled by hildon-home.&lt;br /&gt;
*The applets can have only tap interaction (because of panning of Home screens)&lt;br /&gt;
*The applets cannot have focus (because of the &amp;quot;call from Home&amp;quot; feature)&lt;br /&gt;
*Class methods:&lt;br /&gt;
**''const gchar *hd_home_plugin_item_get_dl_filename (HDHomePluginItem *item);''&lt;br /&gt;
**''DBusConnection *hd_home_plugin_item_get_dbus_connection ( HDHomePluginItem *item, DBusBusType type, DBusError *error);''&lt;br /&gt;
**''DBusGConnection *hd_home_plugin_item_get_dbus_g_connection ( HDHomePluginItem *item, DBusBusType type, GError **error);''&lt;br /&gt;
**''guint hd_home_plugin_item_heartbeat_signal_add ( HDHomePluginItem *item, guint mintime, guint maxtime, GSourceFunc source_func, gpointer data, GDestroyNotify destroy);''&lt;br /&gt;
**''void hd_home_plugin_item_set_settings (HDHomePluginItem *item, gboolean settings); /* Whether the applet supports settings */''&lt;br /&gt;
**''gchar *hd_home_plugin_item_get_applet_id (HDHomePluginItem *item) ''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Applet should install a desktop file, e.g.:&lt;br /&gt;
&lt;br /&gt;
      [Desktop Entry]&lt;br /&gt;
      Name=Example Home Applet&lt;br /&gt;
      Comment=Description of the Example Home Applet&lt;br /&gt;
      Type=default&lt;br /&gt;
      X-Path=example-home-applet.so&lt;br /&gt;
      X-Multiple-Instances=true&lt;br /&gt;
      X-Text-Domain=gettextdomain&lt;br /&gt;
      X-Display-On-All-Views=no&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To specify default position, Gconf schema should be installed. E.g.:&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
      &amp;lt;gconfschemafile xmlns:confml=&amp;quot;http://www.s60.com/xml/confml/2&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;schemalist&amp;gt;&lt;br /&gt;
          &amp;lt;!--Settings for calendar-home-applet.desktop--&amp;gt;&lt;br /&gt;
          &amp;lt;!--Home view where shortcut is visible--&amp;gt;&lt;br /&gt;
          &amp;lt;schema&amp;gt;&lt;br /&gt;
            &amp;lt;key&amp;gt;/schemas/apps/osso/hildon-desktop/applets/calendar-home-applet.desktop/view&amp;lt;/key&amp;gt;&lt;br /&gt;
            &amp;lt;applyto&amp;gt;/apps/osso/hildon-desktop/applets/calendar-home-applet.desktop/view&amp;lt;/applyto&amp;gt;&lt;br /&gt;
            &amp;lt;type&amp;gt;int&amp;lt;/type&amp;gt;&lt;br /&gt;
            &amp;lt;default&amp;gt;1&amp;lt;/default&amp;gt;&lt;br /&gt;
            &amp;lt;locale name=&amp;quot;C&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/schema&amp;gt;&lt;br /&gt;
          &amp;lt;!--Position of shortcut--&amp;gt;&lt;br /&gt;
          &amp;lt;schema&amp;gt;&lt;br /&gt;
            &amp;lt;key&amp;gt;/schemas/apps/osso/hildon-desktop/applets/calendar-home-applet.desktop/position&amp;lt;/key&amp;gt;&lt;br /&gt;
            &amp;lt;applyto&amp;gt;/apps/osso/hildon-desktop/applets/calendar-home-applet.desktop/position&amp;lt;/applyto&amp;gt;&lt;br /&gt;
            &amp;lt;type&amp;gt;list&amp;lt;/type&amp;gt;&lt;br /&gt;
            &amp;lt;list_type&amp;gt;int&amp;lt;/list_type&amp;gt;&lt;br /&gt;
            &amp;lt;default&amp;gt;[10,20]&amp;lt;/default&amp;gt;&lt;br /&gt;
            &amp;lt;locale name=&amp;quot;C&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/schema&amp;gt;&lt;br /&gt;
        &amp;lt;/schemalist&amp;gt;&lt;br /&gt;
      &amp;lt;/gconfschemafile&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In contrast to Status Menu and Notification plugins Home applets are not enabled by default but need to be enabled in the home.plugins file (/etc/hildon-desktop/home.plugins or ~/.config/hildon-desktop/home.plugins). &lt;br /&gt;
&lt;br /&gt;
===API for creating Web bookmarks===&lt;br /&gt;
The libhildondesktop library provides function hd_shortcuts_add_bookmark_shortcut for adding a Web bookmark shortcut on Home.&lt;br /&gt;
&lt;br /&gt;
==hildon-status-menu ==&lt;br /&gt;
The hildon-status-menu process implements Status menu and Status area. The Status menu displays windows of dynamically loaded Gtk+ applets. All available Status menu applets are displayed in the menu, and some of them might have an icon in the Status area, depending on the conﬁguration. Status menu applets can start new applications using the D-Bus autoactivation system, and they can display controls that the user can directly manipulate on their window. The Status area is basically a button that allows the user open the Status menu. &lt;br /&gt;
Status area expands to accommodate its plugin icons (from selected Status menu plugins), but it has a pre-conﬁgured limit for the maximum number of plugin icons. &lt;br /&gt;
&lt;br /&gt;
===Status menu plugin API===&lt;br /&gt;
*Status Area and Status Menu plugins are the same: every Status Menu plugin can show up on Status Area, too.&lt;br /&gt;
*Plugins inherit from ''HDStatusMenuItem'' (subclass of ''HDStatusPluginItem'', which is subclass of ''GtkBin'') ''GObject'' class, which has these class methods inherited from ''HDStatusPluginItem'':&lt;br /&gt;
**Function for setting (or changing) the Status Area icon (''GdkPixbuf''): ''hd_status_plugin_item_set_status_area_icon'', ::status-area-icon property&lt;br /&gt;
**Function for setting ''GtkWidget'' instead of ''GdkPixbuf'' as the Status Area icon: ''void hd_status_plugin_item_set_status_area_widget ( HDStatusPluginItem *item, GtkWidget*widget)'';&lt;br /&gt;
**Function for registering callbacks using the system-wide synchronized timers: ''hd_status_plugin_item_heartbeat_signal_add''&lt;br /&gt;
**Function for getting name of the plugin file, e.g. ''get_dlfilename: hd_status_plugin_item_get_dl_filename, ::dl-filename property''&lt;br /&gt;
**''DBusConnection *hd_status_plugin_item_get_dbus_connection ( HDStatusPluginItem *item, DBusBusType type, DBusError *error);''&lt;br /&gt;
**''DBusGConnection *hd_status_plugin_item_get_dbus_g_connection ( HDStatusPluginItem *item, DBusBusType type, GError **error);'' &lt;br /&gt;
*''HD_DEFINE_PLUGIN_MODULE'' macro is used to define the plugin class as subclass of ''GTypeModule'.&lt;br /&gt;
*Plugin widget's standard GObject constructor and destructor are used.&lt;br /&gt;
*Widget's visibility (in ''Gtk'') is used to show and hide the plugin.&lt;br /&gt;
*If the plugin is a ''GtkButton'', pressing it closes Status Menu.&lt;br /&gt;
*First, all ''.desktop'' files are read, then plugins are loaded and laid out in the priority order.&lt;br /&gt;
*The dynamic object file name determines the name of the plugin (name should be used in debugging and D-Bus names).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:hildon-statusmenu_decomposition.png|800px]]&lt;br /&gt;
&lt;br /&gt;
==Hildon Input Methods==&lt;br /&gt;
The Hildon input method system is architecturally separated from the rest of the Desktop domain, and it does not require any special handling in the window manager in Fremantle. &lt;br /&gt;
&lt;br /&gt;
Fremantle will not have the partial-screen virtual keyboard anymore, only the full-screen on-screen keyboard and hardware keyboard. (MORE INFO NEEDED)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Clipboard manager==&lt;br /&gt;
The Clipboard manager implements a clipboard manager for X window applications. It is taken from Diablo and the changes are kept minimal.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Configuration and Customization==&lt;br /&gt;
The following subsections indicate how the UI framework is configured.&lt;br /&gt;
&lt;br /&gt;
===Theme configuration===&lt;br /&gt;
The current theme is speciﬁed by ''/etc/hildon/theme'' symbolic link (by default it points to ''/usr/share/themes/default)''. The value of ''/etc/hildon/theme'' is also reﬂected in the MB_THEME property on the root window. The system default theme is speciﬁed by ''/usr/share/themes/default'' symbolic link. The system default theme must be present at all times because it is used as a fallback theme in case the user tries to switch to an invalid theme, and when restoring original settings from Control Panel. &lt;br /&gt;
&lt;br /&gt;
When the user changes the theme using the Control Panel theme applet, the applet changes ''/etc/hildon/theme'' to point to the new theme, and hildon-desktop adjusts MB_THEME accordingly. hildon-desktop will set MB_THEME also when it starts up. The applications should use ''/etc/hildon/theme'' or MB_THEME to determine the currently selected theme. &lt;br /&gt;
&lt;br /&gt;
===Task launcher conﬁguration=== &lt;br /&gt;
The Task launcher is populated with applications that have installed their desktop ﬁles in the &lt;br /&gt;
''/usr/share/applications/hildon'' directory, as it is in Diablo. Layout of Task launcher is speciﬁed in a XML ﬁle inspired by the freedesktop.org Desktop Menu Specification 1.0 . It will be stored in ''/etc/xdg/menus/applications.menu'' and, in case it is modiﬁed, in ''$HOME/.config/menus/applications.menu''. &lt;br /&gt;
&lt;br /&gt;
===Home applet conﬁguration ===&lt;br /&gt;
Pre-installed conﬁguration ﬁles and the user deﬁne the Home applet conﬁguration. There are three conﬁguration ﬁles specifying the system-default conﬁguration: &lt;br /&gt;
*''/etc/hildon-desktop/home.conf''&lt;br /&gt;
*''/etc/hildon-desktop/home.plugins'' and &lt;br /&gt;
*''/etc/hildon-desktop/home.safe-set''&lt;br /&gt;
&lt;br /&gt;
''home.conf'' speciﬁes the directory for Home applets desktop ﬁles (''default: /usr/share/applications/hildon-home'') and the plugin conﬁguration ﬁle (default: ''/etc/hildon-desktop/home.plugins''). &lt;br /&gt;
&lt;br /&gt;
''home.plugins'' speciﬁes the plugins which should be loaded when hildon-home starts, it simply lists the desktop ﬁles of the plugins. home.safe-set lists plugins which are included in the “safe set” of plugins; these applets will be loaded always (they must also be included in home.plugins), unlike the other plugins which are not loaded if hildon-home crashes and restarts. &lt;br /&gt;
&lt;br /&gt;
''/etc/hildon-desktop/home.plugins'' can be overridden with ''$HOME/.config/hildon-desktop/home.plugins'', which is created when the user changes conﬁguration of loaded applets. &lt;br /&gt;
&lt;br /&gt;
===Status menu plugin conﬁguration===&lt;br /&gt;
There are two pre-installed conﬁguration ﬁles specifying the system-default status menu plugins: &lt;br /&gt;
*''/etc/hildon-desktop/status-menu.conf'' and &lt;br /&gt;
*''/etc/hildon-desktop/status-menu.plugins''&lt;br /&gt;
&lt;br /&gt;
The ﬁrst one speciﬁes the directory from where Status menu plugins desktop ﬁles can be found (default: ''/usr/share/applications/hildon-status-menu'') and the ﬁle deﬁning the “safe set” of plugins (default: ''/etc/hildon-desktop/status-menu.plugins''). Normally Status menu loads all plugins listed in status-menu.plugins and all plugins that have installed a desktop ﬁle to the above mentioned directory; however, if Status menu crashes and restarts, it only loads plugins listed in status-menu.plugins.&lt;/div&gt;</description>
			<pubDate>Mon, 31 Aug 2009 13:31:05 GMT</pubDate>			<dc:creator>Maemo</dc:creator>			<comments>http://bugs.maemo.com/Talk:Documentation/Maemo_5_Developer_Guide/Architecture/UI_Framework</comments>		</item>
		<item>
			<title>Documentation/Maemo 5 Developer Guide/Architecture/Top Level Architecture</title>
			<link>http://bugs.maemo.com/Documentation/Maemo_5_Developer_Guide/Architecture/Top_Level_Architecture</link>
			<guid>http://bugs.maemo.com/Documentation/Maemo_5_Developer_Guide/Architecture/Top_Level_Architecture</guid>
			<description>&lt;p&gt;Maemo:&amp;#32;Created page with '=Maemo 5 Software Architecture= The following figure gives a logical decomposition view of Maemo 5 software architecture based on the domains delivering software to the Fremantle…'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Maemo 5 Software Architecture=&lt;br /&gt;
The following figure gives a logical decomposition view of Maemo 5 software architecture based on the domains delivering software to the Fremantle release.&lt;br /&gt;
&lt;br /&gt;
''Note: The components marked in &amp;lt;font color=red&amp;gt; red&amp;lt;/font&amp;gt; are proprietary components.''&lt;br /&gt;
&lt;br /&gt;
[[Image:top_level_architecture.png|800px]]&lt;br /&gt;
&lt;br /&gt;
'''Core Domain''' contains  bootloader and Calibration Area, Linux kernel, X windowing system (X11), OpenGL ES, and (some) essential user space components (the C library, essential user space tools, and system configuration data and tools) adapted / configured for the Fremantle HW. &lt;br /&gt;
&lt;br /&gt;
'''System Software domain''' is responsible for user modes, device states including start-up/shutdown, display and other inactivity state control, providing robustness services, power management, and battery management.&lt;br /&gt;
&lt;br /&gt;
'''Connectivity domain''' provides the APIs, user interfaces and underlying user-space and kernel components for Wireless Internet, Wireless local and Home connectivity, implements connection establishment mechanisms and user interfaces to control Internet access points on the device. This includes WLAN, connections over Bluetooth, also UPnP, and Device Management (uses the Funambol OMA DM/DS framework).&lt;br /&gt;
&lt;br /&gt;
'''RTCom domain''' provides both services, and applications, for realtime Internet communications (Voice Over IP  calls and Instant Messaging) on &lt;br /&gt;
Maemo platform. It also provides and distributes presence information within the system and is responsible for smooth integration of the externally developed Skype application into the system.&lt;br /&gt;
&lt;br /&gt;
'''Multimedia Framework domain''' contains the multimedia APIs including GStreamer, ALSA and PulseAudio, and the lower level functionality such as DSP codecs. Multimedia Framework also responsible for policy, audio-routing, and event-sounds. &lt;br /&gt;
&lt;br /&gt;
'''Location domain''' implements a framework that applications can use to become location aware. Location implements also an API that provides a set of location related utilities like geocoding, reverse geocoding, show on map, select from map, get map data and POI (Point Of Interest) repository. It also includes everything related to GPS and SUPL.&lt;br /&gt;
&lt;br /&gt;
'''Toolkit domain''' contains the graphical UI libraries to draw content on the device’s screen and used by the applications to create user graphical interfaces. &lt;br /&gt;
&lt;br /&gt;
'''Desktop domain''' contains Window Manager and Clutter, Home, Status Menu, and their plugins, Control Panel and its applets, Input Methods and I18N, and application services such as Startup. &lt;br /&gt;
&lt;br /&gt;
'''Data Management domain''' consists of application and user data related subsystems. It also includes GConf. &lt;br /&gt;
&lt;br /&gt;
'''Applications domain''' provides end user applications like Browser, Email, Calendar, Games etc provides public interfaces for 3rd party applications to access them.&lt;br /&gt;
&lt;br /&gt;
'''Graphics domain''' provides sounds, icons and pre-installed content for the device.&lt;/div&gt;</description>
			<pubDate>Mon, 31 Aug 2009 13:15:23 GMT</pubDate>			<dc:creator>Maemo</dc:creator>			<comments>http://bugs.maemo.com/Talk:Documentation/Maemo_5_Developer_Guide/Architecture/Top_Level_Architecture</comments>		</item>
	</channel>
</rss>