Vala + GTK+3 y Granite (guardar valores en dconf)

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:

main.vala
tutorial.vala
settings.vala
org.tutorial.gschema.xml

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

  1.   Raul P dijo

    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.

    1.    Raul P dijo

      Perdon quise decir C, no C++. Cuando abro el codeblocks, siempre escojo “Un proyecto en C++”, pero programo en C.

  2.   menace dijo

    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.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.