Cómo insertar un elemento a la lista de documentos recientes en C

Publicado el 04 marzo 2016 por Gaspar Fernández Moreno @gaspar_fm

Hoy toca un código muy rápido para nuestras aplicaciones con Gtk+ (yo he usado la versión 3 para este ejemplo). Lo que haremos será incluir un archivo (el que nosotros queramos) en la lista de " Usados recientemente" de forma que cuando vayamos a algún diálogo de apertura de archivo veamos añadido dicho documento.
Esto puede ser muy útil cuando nuestra aplicación salve o cargue archivos y queramos que el usuario pueda utilizarlos rápidamente desde otra aplicación.

Seré breve, lo único que necesitamos es obtener acceso al recent manager, crear un acceso al recurso y añadírselo al recent manager.

Luego, debemos hacer que Gtk+ realice algunas llamadas internas durante un periodo ínfimo de tiempo y listo.

Versión super-reducida

Esta versión es sólo una prueba de concepto, para ver que todo funciona. El programa no tiene entorno gráfico alguno, sólo parece que se queda colgado, y de hecho se limita a esperar llamadas a sistema, y dichas llamadas no llegan nunca.
Si has trabajado con Gtk anteriormente, sabrás integrar esto en tus programas.

Versión independiente

Eso sí, el programa, ¡se queda colgado! Eso es mucho, tenemos varias soluciones, la primera es, en lugar de llamar a gtk_main(), llamar a gtk_main_iteration() varias veces. Pero es un poco chapuza, incluso metiéndolo en un bucle tipo:

Pero, es más, esto no nos garantiza que hagamos todas las iteraciones necesarias, ya que puede que algún mensaje no entre inmediatamente. Entonces, para el ejemplo, vamos a hacer que se llame a una función callback automáticamente cuando Gtk+ no tenga nada que hacer (usando g_idle_add(funcion, NULL)), y dicha función, creará el archivo reciente y se saldrá del programa (con gtk_main_quit(), finalizando correctamente el paso de mensajes Gtk+). Así nos dará una mejor sensación.

Compilar

Para compilar, yo he hecho lo siguiente (en Linux):

$ gcc -o recents recents3.c $(pkg-config -libs -cflags gtk+-3.0)

He utilizado pkg-config para obtener todas las bibliotecas necesarias por Gtk+ y todas las rutas a los archivos de cabecera.

Compatibilidad

Aunque no lo he probado, no he utilizado nada 100% específico de Linux, por lo que debería funcionar sin problemas en Windows o en Mac.

Algo más completo

Pasáos por mi GitHub para ver un programa que sirve para hacer esto mismo. Listo para ser compilado. Sólo tenéis que mirar las instrucciones y compilar

Foto principal: Brady Bellini