====== Introduzione alle notifiche con libnotify ====== Autore: **//Fabio Di Matteo//** \\ Ultima revisione: **//12/11/2012//** \\ \\ «Libnotify è una libreria che invia notifiche per il desktop a un demone di notifica come definito nella specifica "Desktop Notifications". Queste notifiche possono essere usate per informare l'utente riguardo un evento o visualizzare delle informazioni senza intralciare l'utente durante l'uso del computer.» \\ \\ [[http://library.gnome.org/devel/libnotify/0.7/|Libnotify]] e' dunque una pratica libreria C che permette di mostrare semplici messaggi di notifica all'utente proprio come fa Gnome per segnalare la presenza del cavo di rete o di una connessione wireless o il cambio da una canzone all'altra su Rhytmbox. \\ Di seguito un sorgente abbondantemente commentato e il suo relativo makefile i quali permettono di realizzare questo genere di popup per desktop: \\ {{programmazione:libnotify:libnotify0.png|}} //(Se interessa un programma che faccia i popup negli script del tipo// ''notificator Titolo 'corpo del testo' icona.png'' andare [[http://www.freemedialab.org/wiki/doku.php?id=programmazione:libnotify:introduzione_alle_notifiche#un_esempio_praticodotiamo_i_nostri_script_delle_notifiche|qui]] ) ===== Sorgente ===== Per la documentazione ufficiale alle altre funzioni della libreria visitare [[http://library.gnome.org/devel/libnotify/]] #include #include #include int main(int argc, char * argv[] ) { NotifyNotification *notifica; notify_init("Hello world"); //Messaggio con titolo testo e icona notifica = notify_notification_new ("Titolo", "Ciao questo è il corpo del messaggio", "/home/fabio/Documenti/icone/gmail.png"); //Mostra la notifica se possibile altrimenti termina con errore if (!notify_notification_show (notifica, NULL)) { fprintf(stderr, "Problemi nel mostrare la notifica\n"); return 1; } g_object_unref(G_OBJECT(notifica)); return 0; } ===== Makefile ===== CPP = gcc OPTS = `pkg-config --cflags --libs gtk+-2.0 glib-2.0 libnotify` all: $(CPP) main.c -o notifica $(OPTS) clean: rm notifica =====Un esempio pratico: dotiamo i nostri script delle notifiche ===== Puo' essere utile dotare i nostri script delle notifiche e appunto per assolvere questo compito utilizzero un nostro comando **notificator** ! \\ L'uso in se' è banale : ./notificator **Download** \\ {{programmazione:libnotify:notificator.tar.gz|}} ==== Il codice ==== #include #include #include int usage() { printf("\n USAGE: notificator <text> <absolute path to icon>\n\n"); } int main(int argc, char * argv[] ) { if ( g_strcmp0(argv[1], "--help") == 0) { usage(); return 0;} NotifyNotification *notifica; notify_init("Notificator"); notifica = notify_notification_new (argv[1], argv[2], argv[3]); if (!notify_notification_show (notifica, NULL)) { fprintf(stderr, "Error on notify\n"); return 1; } g_object_unref(G_OBJECT(notifica)); return 0; } </code> ==== make file ==== <file> CPP = gcc OPTS = `pkg-config --cflags --libs gtk+-2.0 glib-2.0 libnotify` all: $(CPP) main.c -o notificator $(OPTS) clean: rm notificator install: cp notificator /usr/local/bin/ </file> ===== Usare nofity-send ===== Nelle distribuzioni Gnome e Mate desktop esiste un eseguibile che fa piu' o meno le stesse cose di ''notificator'' . Ecco un esempio di utilizzo: <file>notify-send Messaggio --icon=/mnt/dati/Documenti/downloads/faccia.png " Il cavo hdmi è stato connesso con successo" </file> {{programmazione:libnotify:notify-send.png|}} <file> Usage: notify-send [OPTION...] <SUMMARY> [BODY] - create a notification Help Options: -?, --help Show help options Application Options: -u, --urgency=LEVEL Specifies the urgency level (low, normal, critical). -t, --expire-time=TIME Specifies the timeout in milliseconds at which to expire the notification. -a, --app-name=APP_NAME Specifies the app name for the icon -i, --icon=ICON[,ICON...] Specifies an icon filename or stock icon to display. -c, --category=TYPE[,TYPE...] Specifies the notification category. -h, --hint=TYPE:NAME:VALUE Specifies basic extra data to pass. Valid types are int, double, string and byte. -v, --version Version of the package. </file>