Indice

Mateconf

Autore: Fabio Di Matteo
Ultima revisione: 27/05/2012

L'ambiente desktop Mate salva tutte le configurazioni in un database centralizzato chiamato Mateconf . E' una base dati con una struttura ad albero e puo' essere facilmente modificata con un' utility chiamata mateconf-editor . Ecco uno screenshot:

Vedremo in questa guida come interagire con mateconf scrivendo le nostre applicazioni.

Risorse

Consiglio di tenere in considerazione (per completezza) anche anche il testo: “The official GNOME 2 developer's guide” di Matthias Warkus (considerando che le strutture e funzioni di mate hanno nomi diversi) e la documentazione dei sorgenti (scaricata da git) del desktop mate. Quando si scarica il sorgente di Mate Desktop ogni cartella contiene una sottocartella doc/ con esempi e documentazione.

Il codice

Il codice che segue serve a leggere il valore (in questo caso booleano) della chiave /desktop/mate/interface/can_change_accels .

main.c

#include <libmate/libmate.h>
#include <libmateui/libmateui.h>
#include <mateconf/mateconf-client.h>
 
int main(int argc, char **argv)
{
	MateProgram *program;
	MateConfClient *client;
	gchar *path;
	GError **error;
 
	/*Inizializziamo l'applicazione Mate, tutte le applicazioni Mate dovrebbero essere inizializzate*/
	program = mate_program_init ("mytest", "0.0", LIBMATEUI_MODULE,	argc, argv, NULL);
 
 
	/* Creo il MateConf client object */
	client = mateconf_client_get_default();
	mateconf_client_set_error_handling(client, MATECONF_CLIENT_HANDLE_UNRETURNED);
 
	/* Comunico a mateconf che voglio attenzionare questa directory */
	path = mate_mateconf_get_app_settings_relative(program, "/desktop/mate/interface");
	mateconf_client_add_dir(client, path, MATECONF_CLIENT_PRELOAD_RECURSIVE, NULL);
 
 
	/*Leggo il mio valore (in questo caso un booleano)*/
	gboolean my_can_change_accels;
	my_can_change_accels = mateconf_client_get_bool(client, "/desktop/mate/interface/can_change_accels", NULL);
 
	//In base a cio' che ho letto stampo un messaggio piuttosto che un'altro
	if (my_can_change_accels == TRUE) printf("Si, puoi ridefinire le scorciatoie da tastiera \n");
	if (my_can_change_accels == FALSE) printf("NON puoi ridefinire le scorciatoie da tastiera \n");
 
	/* remove path */
	mateconf_client_remove_dir(client, path, NULL);
	g_free(path);
 
	/* destroy client object */
	g_object_unref(client);
}

Il Makefile

makefile

CPP = gcc 
OPTS =  `pkg-config --cflags --libs libmate-2.0 mateconf-2.0 libmateui-2.0  libmatecomponent-2.0`

all:
	$(CPP) main.c -o main $(OPTS)

clean:
	rm main

Dipendenze necessarie per compilare questi esempi

Ecco i pochi passi necessari per installare le dipendenze.

0) Installare in forma binaria il mate-desktop (http://mate-desktop.org/install/)

1) Installare i pacchetti di sviluppo (-dev) in base ai progetti da realizzare

per esempio se voglio compilare gli esempi contenuti nella cartella "mate-conf"
basta guardare le prime righe di codice:
		
		#include <libmate/libmate.h>
		#include <libmateui/libmateui.h>
		#include <mateconf/mateconf-client.h>
		
per renderci conto che dobbiamo installare i pacchetti (-dev) di
libmate-2.0, mateconf-2.0, libmateui-2.0,  libmatecomponent-2.0	

2) Come verificare quali pacchetti mate di sviluppo abbiamo installati?

	Il metodo piu' semplice e immediato è lanciare pkg-config in questo modo:
			
		pkg-config --list-all |grep mate
	
	Potremmo così avere un'idea precisa dei pacchetti di cui siamo a disposizione.