Programando en Vala y GTK+, todo nos habremos preguntado alguna vez ¿como hacer que una aplicación escrita en Vala y GTK+ pueda guardar los estados de los parámetros del tamaño de la ventana y demás?. Son de estos tipicos casos que usamos gschemas para guardar dichos valores (esta aplicación tan conocida dconf-editor) que gestiona gráficamente estos esquemas.
Ahora les muestro como hacer esto en sencillos pasos y sin complicaciones usando la clase Granite.Services.Settings de la librería Granite.
¿Que necesitamos?
Primeramente necesitamos tener instalado las librerías de GTK+, Granite y Vala para poder compilar nuestro código. Para ello en Ubuntu/ElementaryOS usamos el comando:
sudo apt-get install libgtk-3-dev libgranite-dev granite-demo valac
Y también necesitaremos cualquier editor de texto que soporte sintaxis Vala/GTK+ y XML como Scratch Text Editor (default de ElementaryOS), GEdit, Sublime Text + Plugins, etc.
El Código
A continuación los archivos del Ejemplo. Para mejor comprensión dejo el código en PASTE con comentarios en ellos:
Explicaciones
El archivo del Schema, si o si debe ser XML y llamarse ORG.APLICACION.GSCHEMA.XML. Es decir, tanto el ORG como GSCHEMA.XML deben estar para que dconf la reconozca como esquema. Además estos esquemas deben ir copiados a la ruta:
/usr/share/glib-2.0/schemas/
y necesitan ser compilado para que DCONF las tome, para ello ejecutamos el comando:
sudo glib-compile-schemas /usr/share/glib-2.0/schemas/
Compilando
Para compilar nuestro programa tenemos que lanzar el siguiente comando en una terminal:
valac --pkg gtk+-3.0 --pkg granite main.vala tutorial.vala settings.vala
Y ejecutar el binario con el comando:
./main
Conclusiones
Es uno de los mejores métodos para guardar el estado de nuestra APP en GSCHEMA usando GLIB. Cualquier tipo de pregunta estaré contento de responderla.
Acá les dejo una captura de mi Ubuntu y el Ejemplo:
3 comentarios, deja el tuyo
Buen articulo, no vienen mal unos tutoriales de GTK en C++. Las cosas han cambiado muchisimo, el sitio oficial de GTK, recomienda libros del 2002, yo cometi el error de comprarlo.
El DevHelp ayuda mas que cualquier libro.
Perdon quise decir C, no C++. Cuando abro el codeblocks, siempre escojo «Un proyecto en C++», pero programo en C.
Buen tuto, me gustaría saber y se que no viene al caso, pero en verdad me he dado bastante golpes de cabeza para poder realizar éste planteamiento, necesito personalizar el background y el login screen con una imagen institucional de donde trabajo en los equipos de los usuarios, los mismos poseen una distro venezolana llamada Canaima, basada en Debian 7 Wheezy, los usuarios autentican via LDAP y varios usuarios pueden trabajar en el mismo PC, por lo que se puede dar el caso de que existan varias sesiones en las cuales debe de poseer el wallpaper, los equipos son personalizados por el script para facilitar el trabajos a los técnicos y luego las políticas son inyectadas por el server puppetmaster.
He intentado con gsettings pero solo funciona con el usuario que este iniciando sesión, al parecer guarda la información en una bd local por usuario la cual no he conseguido aún, estoy buscando alguna configuración que aplique para todo el sistema y no para un solo usuario.
Cabe mencionar que la imgen cambia constantemente por fechas patrias y caulquier otro motivo, así q no es solo una imgen, las mismas son subidas por el puppetmaster a cada cliente.
No tengo idea si con algo parecido a ésto se puede aplicar a mi caso.
Saludos.