¿Cómo configuro un emblema con GTK/GIO?
Pregunta
Estoy tratando de configurar un emblema usando Gio
#include <gtk/gtk.h>
#include <gdk/gdk.h>
#include <glib.h>
#include <gio/gio.h>
#include <stdio.h>
int main (int argc, char *argv[])
{
GFile *gfile = NULL;
g_type_init();
gfile = g_file_new_for_path("./foo.txt");
if (g_file_set_attribute_string(gfile,
"metadata::emblems",
"favorite",
G_FILE_QUERY_INFO_NONE,
NULL, NULL) == TRUE) {
puts("Success");
} else {
puts("Fail");
}
return 0;
}
Si el archivo existe, la función devuelve verdadero, que, según los documentos, significa que los metadatos se establecieron, pero Nautilus (GNOME) no muestra el favorite
emblema. No hay muchos ejemplo en la red, así que estoy un poco atascado.
Solución
Parece que Metadata :: Emblems necesita una variedad de cuerdas, incluso si solo está configurando un valor. Esto parece funcionar:
char *value[] = {"favorite", '\0'};
[...]
g_file_set_attribute(file, "metadata::emblems",
G_FILE_ATTRIBUTE_TYPE_STRINGV,
&value[0],
G_FILE_QUERY_INFO_NONE,
NULL, NULL);
Otros consejos
Si desea que Nautilus muestre un emblema, debe proporcionar una extensión a Nautilus para hacerlo. Su extensión debe usar el nautilus-info-proveedor interfaz y en el nautilus_info_provider_update_file_info () función puede llamar al nautilus_file_info_add_emblem () función para agregar un emblema.